summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2013-02-07 11:47:37 +0000
committertavmjong-free <tavmjong@free.fr>2013-02-07 11:47:37 +0000
commita3d3d3df4c67f666083e7c4c2ea56bb94705bbbf (patch)
tree5a9f0a673ca35bbfbfcb1949f8fff24e35ea66ab
parentAdd fonts (and font-lists) used in document to top of Text tool-bar font-fami... (diff)
downloadinkscape-a3d3d3df4c67f666083e7c4c2ea56bb94705bbbf.tar.gz
inkscape-a3d3d3df4c67f666083e7c4c2ea56bb94705bbbf.zip
Add separator between fonts in document and fonts on sytem in font-family drop-down menu.
Separator style depends on GTK theme (may be invisible). (bzr r12105)
-rw-r--r--src/ink-comboboxentry-action.cpp28
-rw-r--r--src/ink-comboboxentry-action.h2
-rw-r--r--src/widgets/text-toolbar.cpp39
3 files changed, 59 insertions, 10 deletions
diff --git a/src/ink-comboboxentry-action.cpp b/src/ink-comboboxentry-action.cpp
index 78becbd53..5adc3e73a 100644
--- a/src/ink-comboboxentry-action.cpp
+++ b/src/ink-comboboxentry-action.cpp
@@ -53,6 +53,7 @@ enum {
PROP_ENTRY_WIDTH,
PROP_EXTRA_WIDTH,
PROP_CELL_DATA_FUNC,
+ PROP_SEPARATOR_FUNC,
PROP_POPUP,
PROP_FOCUS_WIDGET
};
@@ -109,6 +110,10 @@ static void ink_comboboxentry_action_set_property (GObject *object, guint proper
action->cell_data_func = g_value_get_pointer( value );
break;
+ case PROP_SEPARATOR_FUNC:
+ action->separator_func = g_value_get_pointer( value );
+ break;
+
case PROP_POPUP:
action->popup = g_value_get_boolean( value );
break;
@@ -154,6 +159,10 @@ static void ink_comboboxentry_action_get_property (GObject *object, guint proper
g_value_set_pointer (value, action->cell_data_func);
break;
+ case PROP_SEPARATOR_FUNC:
+ g_value_set_pointer (value, action->separator_func);
+ break;
+
case PROP_POPUP:
g_value_set_boolean (value, action->popup);
break;
@@ -249,6 +258,14 @@ ink_comboboxentry_action_class_init (Ink_ComboBoxEntry_ActionClass *klass)
g_object_class_install_property (
gobject_class,
+ PROP_SEPARATOR_FUNC,
+ g_param_spec_pointer ("separator_func",
+ "Separator Func",
+ "Separator Function",
+ (GParamFlags)G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ gobject_class,
PROP_POPUP,
g_param_spec_boolean ("popup",
"Entry Popup",
@@ -303,6 +320,7 @@ Ink_ComboBoxEntry_Action *ink_comboboxentry_action_new (const gchar *name,
gint entry_width,
gint extra_width,
void *cell_data_func,
+ void *separator_func,
GtkWidget *focusWidget)
{
g_return_val_if_fail (name != NULL, NULL);
@@ -316,6 +334,7 @@ Ink_ComboBoxEntry_Action *ink_comboboxentry_action_new (const gchar *name,
"entry_width", entry_width,
"extra_width", extra_width,
"cell_data_func", cell_data_func,
+ "separator_func", separator_func,
"focus-widget", focusWidget,
NULL);
}
@@ -365,6 +384,13 @@ GtkWidget* create_tool_item( GtkAction* action )
NULL, NULL );
}
+ // Optionally add separator function...
+ if( ink_comboboxentry_action->separator_func != NULL ) {
+ gtk_combo_box_set_row_separator_func( ink_comboboxentry_action->combobox,
+ GtkTreeViewRowSeparatorFunc (ink_comboboxentry_action->separator_func),
+ NULL, NULL );
+ }
+
// Optionally widen the combobox width... which widens the drop-down list in list mode.
if( ink_comboboxentry_action->extra_width > 0 ) {
GtkRequisition req;
@@ -469,7 +495,7 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
// Explicitly set text in GtkEntry box (won't be set if text not in list).
gtk_entry_set_text( ink_comboboxentry_action->entry, text );
- // Show or hide warning
+ // Show or hide warning -- this might be better moved to text-toolbox.cpp
bool clear = true;
if( ink_comboboxentry_action->active == -1 &&
ink_comboboxentry_action->warning != NULL ) {
diff --git a/src/ink-comboboxentry-action.h b/src/ink-comboboxentry-action.h
index 7d4093f4e..f0dc0ee7e 100644
--- a/src/ink-comboboxentry-action.h
+++ b/src/ink-comboboxentry-action.h
@@ -51,6 +51,7 @@ struct _Ink_ComboBoxEntry_Action {
GtkWidget *indicator;
gpointer cell_data_func; // drop-down menu format
+ gpointer separator_func;
gint active; // Index of active menu item (-1 if not in list).
gchar *text; // Text of active menu item or entry box.
@@ -76,6 +77,7 @@ Ink_ComboBoxEntry_Action *ink_comboboxentry_action_new ( const gchar *name,
gint entry_width = -1,
gint extra_width = -1,
gpointer cell_data_func = NULL,
+ gpointer separator_func = NULL,
GtkWidget* focusWidget = NULL);
GtkTreeModel *ink_comboboxentry_action_get_model( Ink_ComboBoxEntry_Action* action );
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index 8b3612db4..42d309994 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -217,6 +217,16 @@ static void cell_data_func(GtkCellLayout * /*cell_layout*/,
}
+// Separator function (if true, a separator will be drawn)
+static gboolean separator_func(GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer /*data*/)
+{
+ gchar* text = 0;
+ gtk_tree_model_get(model, iter, 0, &text, -1 ); // Column 0
+ return (text && strcmp(text,"separatoR") == 0);
+}
+
/*
* Fill the font style combobox with the available font styles for the selected font family
* Set the selected style to that in font
@@ -1626,6 +1636,13 @@ sp_text_toolbox_update_font_list( GtkListStore* model ) {
}
}
+ /* Insert separator */
+ if( !fontfamilies.empty() ) {
+ gtk_list_store_insert( model, &iter, 0 ); // iter points to new row
+ gtk_list_store_set( model, &iter, 0, "separatoR", -1 );
+ }
+
+
/* Insert doc font-family entries, list is already reverse sorted with duplicates removed. */
std::list<Glib::ustring>::iterator i;
for(i=fontfamilies.begin(); i != fontfamilies.end(); ++i) {
@@ -1676,15 +1693,17 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
GtkListStore* model = store->gobj();
sp_text_toolbox_update_font_list( model );
- Ink_ComboBoxEntry_Action* act = ink_comboboxentry_action_new( "TextFontFamilyAction",
- _("Font Family"),
- _("Select Font Family (Alt-X to access)"),
- NULL,
- GTK_TREE_MODEL(model),
- -1, // Entry width
- 50, // Extra list width
- (gpointer)cell_data_func,// Cell layout
- GTK_WIDGET(desktop->canvas)); // Focus widget
+ Ink_ComboBoxEntry_Action* act =
+ ink_comboboxentry_action_new( "TextFontFamilyAction",
+ _("Font Family"),
+ _("Select Font Family (Alt-X to access)"),
+ NULL,
+ GTK_TREE_MODEL(model),
+ -1, // Entry width
+ 50, // Extra list width
+ (gpointer)cell_data_func, // Cell layout
+ (gpointer)separator_func,
+ GTK_WIDGET(desktop->canvas)); // Focus widget
ink_comboboxentry_action_popup_enable( act ); // Enable entry completion
gchar *const warning = _("Font not found on system");
ink_comboboxentry_action_set_warning( act, warning ); // Show icon with tooltip if missing font
@@ -1721,6 +1740,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
4, // Width in characters
0, // Extra list width
NULL, // Cell layout
+ NULL, // Separator
GTK_WIDGET(desktop->canvas)); // Focus widget
g_signal_connect( G_OBJECT(act), "changed", G_CALLBACK(sp_text_fontsize_value_changed), holder );
@@ -1740,6 +1760,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
12, // Width in characters
0, // Extra list width
NULL, // Cell layout
+ NULL, // Separator
GTK_WIDGET(desktop->canvas)); // Focus widget
g_signal_connect( G_OBJECT(act), "changed", G_CALLBACK(sp_text_fontstyle_value_changed), holder );