index 60332e02ea72d2363dfa040758dfb96739dda6df..74034e5377e29f0ca0f8e71306ec07186ae34d71 100644 (file)
* Setting GtkEntryBox width in characters.
* Passing a function for formatting cells.
* Displaying a warning if text isn't in list.
* Setting GtkEntryBox width in characters.
* Passing a function for formatting cells.
* Displaying a warning if text isn't in list.
+ * Setting names for GtkComboBoxEntry and GtkEntry (actionName_combobox, actionName_entry)
+ * to allow setting resources.
*
* Author(s):
* Tavmjong Bah
*
* Author(s):
* Tavmjong Bah
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2010 Authors
*
*
* Copyright (C) 2010 Authors
*
PROP_MODEL = 1,
PROP_COMBOBOX,
PROP_ENTRY,
PROP_MODEL = 1,
PROP_COMBOBOX,
PROP_ENTRY,
- PROP_WIDTH,
+ PROP_ENTRY_WIDTH,
+ PROP_EXTRA_WIDTH,
PROP_CELL_DATA_FUNC,
PROP_POPUP
};
PROP_CELL_DATA_FUNC,
PROP_POPUP
};
action->entry = GTK_ENTRY( g_value_get_object( value ));
break;
action->entry = GTK_ENTRY( g_value_get_object( value ));
break;
- case PROP_WIDTH:
- action->width = g_value_get_int( value );
+ case PROP_ENTRY_WIDTH:
+ action->entry_width = g_value_get_int( value );
+ break;
+
+ case PROP_EXTRA_WIDTH:
+ action->extra_width = g_value_get_int( value );
break;
case PROP_CELL_DATA_FUNC:
break;
case PROP_CELL_DATA_FUNC:
@@ -122,8 +130,12 @@ static void ink_comboboxentry_action_get_property (GObject *object, guint proper
g_value_set_object (value, action->entry);
break;
g_value_set_object (value, action->entry);
break;
- case PROP_WIDTH:
- g_value_set_int (value, action->width);
+ case PROP_ENTRY_WIDTH:
+ g_value_set_int (value, action->entry_width);
+ break;
+
+ case PROP_EXTRA_WIDTH:
+ g_value_set_int (value, action->extra_width);
break;
case PROP_CELL_DATA_FUNC:
break;
case PROP_CELL_DATA_FUNC:
@@ -196,13 +208,22 @@ static void ink_comboboxentry_action_class_init (Ink_ComboBoxEntry_ActionClass *
(GParamFlags)G_PARAM_READABLE));
g_object_class_install_property (
gobject_class,
(GParamFlags)G_PARAM_READABLE));
g_object_class_install_property (
gobject_class,
- PROP_WIDTH,
- g_param_spec_int ("width",
+ PROP_ENTRY_WIDTH,
+ g_param_spec_int ("entry_width",
"EntryBox width",
"EntryBox width (characters)",
-1.0, 100, -1.0,
(GParamFlags)G_PARAM_READWRITE));
"EntryBox width",
"EntryBox width (characters)",
-1.0, 100, -1.0,
(GParamFlags)G_PARAM_READWRITE));
+ g_object_class_install_property (
+ gobject_class,
+ PROP_EXTRA_WIDTH,
+ g_param_spec_int ("extra_width",
+ "Extra width",
+ "Extra width (px)",
+ -1.0, 500, -1.0,
+ (GParamFlags)G_PARAM_READWRITE));
+
g_object_class_install_property (
gobject_class,
PROP_CELL_DATA_FUNC,
g_object_class_install_property (
gobject_class,
PROP_CELL_DATA_FUNC,
action->active = -1;
action->text = NULL;
action->entry_completion = NULL;
action->active = -1;
action->text = NULL;
action->entry_completion = NULL;
+#if !GTK_CHECK_VERSION(2,16,0)
+ action->indicator = NULL;
+#endif
action->popup = false;
action->warning = NULL;
action->altx_name = NULL;
action->popup = false;
action->warning = NULL;
action->altx_name = NULL;
const gchar *tooltip,
const gchar *stock_id,
GtkTreeModel *model,
const gchar *tooltip,
const gchar *stock_id,
GtkTreeModel *model,
- gint width,
+ gint entry_width,
+ gint extra_width,
void *cell_data_func )
{
g_return_val_if_fail (name != NULL, NULL);
void *cell_data_func )
{
g_return_val_if_fail (name != NULL, NULL);
"tooltip", tooltip,
"stock-id", stock_id,
"model", model,
"tooltip", tooltip,
"stock-id", stock_id,
"model", model,
- "width", width,
+ "entry_width", entry_width,
+ "extra_width", extra_width,
"cell_data_func", cell_data_func,
NULL);
}
"cell_data_func", cell_data_func,
NULL);
}
Ink_ComboBoxEntry_Action* ink_comboboxentry_action = INK_COMBOBOXENTRY_ACTION( action );
Ink_ComboBoxEntry_Action* ink_comboboxentry_action = INK_COMBOBOXENTRY_ACTION( action );
+ gchar *action_name = g_strdup( gtk_action_get_name( action ) );
+ gchar *combobox_name = g_strjoin( NULL, action_name, "_combobox", NULL );
+ gchar *entry_name = g_strjoin( NULL, action_name, "_entry", NULL );
+ g_free( action_name );
+
item = GTK_WIDGET( gtk_tool_item_new() );
GtkWidget* comboBoxEntry = gtk_combo_box_entry_new_with_model( ink_comboboxentry_action->model, 0 );
item = GTK_WIDGET( gtk_tool_item_new() );
GtkWidget* comboBoxEntry = gtk_combo_box_entry_new_with_model( ink_comboboxentry_action->model, 0 );
+ // Name it so we can muck with it using an RC file
+ gtk_widget_set_name( comboBoxEntry, combobox_name );
+ g_free( combobox_name );
{
GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0);
{
GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0);
+#if GTK_CHECK_VERSION(2,16,0)
gtk_container_add( GTK_CONTAINER(align), comboBoxEntry );
gtk_container_add( GTK_CONTAINER(align), comboBoxEntry );
+#else // GTK_CHECK_VERSION(2,16,0)
+ GtkWidget *hbox = gtk_hbox_new( FALSE, 0 );
+ ink_comboboxentry_action->indicator = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_box_pack_start( GTK_BOX(hbox), comboBoxEntry, TRUE, TRUE, 0 );
+ gtk_box_pack_start( GTK_BOX(hbox), ink_comboboxentry_action->indicator, FALSE, FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER(align), hbox );
+#endif // GTK_CHECK_VERSION(2,16,0)
gtk_container_add( GTK_CONTAINER(item), align );
}
gtk_container_add( GTK_CONTAINER(item), align );
}
NULL, NULL );
}
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;
+ gtk_widget_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ), &req );
+ gtk_widget_set_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ),
+ req.width + ink_comboboxentry_action->extra_width, -1 );
+ }
+
// Get reference to GtkEntry and fiddle a bit with it.
GtkWidget *child = gtk_bin_get_child( GTK_BIN(comboBoxEntry) );
// Get reference to GtkEntry and fiddle a bit with it.
GtkWidget *child = gtk_bin_get_child( GTK_BIN(comboBoxEntry) );
+
+ // Name it so we can muck with it using an RC file
+ gtk_widget_set_name( child, entry_name );
+ g_free( entry_name );
+
if( child && GTK_IS_ENTRY( child ) ) {
if( child && GTK_IS_ENTRY( child ) ) {
+
ink_comboboxentry_action->entry = GTK_ENTRY(child);
// Change width
ink_comboboxentry_action->entry = GTK_ENTRY(child);
// Change width
- if( ink_comboboxentry_action->width > 0 ) {
- gtk_entry_set_width_chars (GTK_ENTRY (child), ink_comboboxentry_action->width );
+ if( ink_comboboxentry_action->entry_width > 0 ) {
+ gtk_entry_set_width_chars (GTK_ENTRY (child), ink_comboboxentry_action->entry_width );
}
// Add pop-up entry completion if required
}
// Add pop-up entry completion if required
}
}
+#if GTK_CHECK_VERSION(2,16,0)
gtk_action_connect_proxy( GTK_ACTION( action ), item );
gtk_action_connect_proxy( GTK_ACTION( action ), item );
+#endif
gtk_widget_show_all( item );
gtk_widget_show_all( item );
@@ -423,20 +481,38 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
// Show or hide warning
if( ink_comboboxentry_action->active == -1 && ink_comboboxentry_action->warning != NULL ) {
#if GTK_CHECK_VERSION(2,16,0)
// Show or hide warning
if( ink_comboboxentry_action->active == -1 && ink_comboboxentry_action->warning != NULL ) {
#if GTK_CHECK_VERSION(2,16,0)
- gtk_entry_set_icon_from_icon_name( ink_comboboxentry_action->entry,
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_DIALOG_WARNING );
+ {
+ GtkStockItem item;
+ gboolean isStock = gtk_stock_lookup( GTK_STOCK_DIALOG_WARNING, &item );
+ if (isStock) {
+ gtk_entry_set_icon_from_stock( ink_comboboxentry_action->entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_DIALOG_WARNING );
+ } else {
+ gtk_entry_set_icon_from_icon_name( ink_comboboxentry_action->entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_DIALOG_WARNING );
+ }
+ }
// Can't add tooltip until icon set
gtk_entry_set_icon_tooltip_text( ink_comboboxentry_action->entry,
GTK_ENTRY_ICON_SECONDARY,
ink_comboboxentry_action->warning );
// Can't add tooltip until icon set
gtk_entry_set_icon_tooltip_text( ink_comboboxentry_action->entry,
GTK_ENTRY_ICON_SECONDARY,
ink_comboboxentry_action->warning );
-
+#else // GTK_CHECK_VERSION(2,16,0)
+ gtk_image_set_from_stock( GTK_IMAGE(ink_comboboxentry_action->indicator), GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_widget_set_tooltip_text( ink_comboboxentry_action->indicator, ink_comboboxentry_action->warning );
#endif // GTK_CHECK_VERSION(2,16,0)
} else {
#if GTK_CHECK_VERSION(2,16,0)
gtk_entry_set_icon_from_icon_name( GTK_ENTRY(ink_comboboxentry_action->entry),
GTK_ENTRY_ICON_SECONDARY,
NULL );
#endif // GTK_CHECK_VERSION(2,16,0)
} else {
#if GTK_CHECK_VERSION(2,16,0)
gtk_entry_set_icon_from_icon_name( GTK_ENTRY(ink_comboboxentry_action->entry),
GTK_ENTRY_ICON_SECONDARY,
NULL );
+ gtk_entry_set_icon_from_stock( GTK_ENTRY(ink_comboboxentry_action->entry),
+ GTK_ENTRY_ICON_SECONDARY,
+ NULL );
+#else // GTK_CHECK_VERSION(2,16,0)
+ gtk_image_set_from_stock( GTK_IMAGE(ink_comboboxentry_action->indicator), NULL, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_widget_set_tooltip_text( ink_comboboxentry_action->indicator, NULL );
#endif // GTK_CHECK_VERSION(2,16,0)
}
}
#endif // GTK_CHECK_VERSION(2,16,0)
}
}
@@ -446,13 +522,25 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
return found;
}
return found;
}
-void ink_comboboxentry_action_set_width( Ink_ComboBoxEntry_Action* action, gint width ) {
+void ink_comboboxentry_action_set_entry_width( Ink_ComboBoxEntry_Action* action, gint entry_width ) {
- action->width = width;
+ action->entry_width = entry_width;
// Widget may not have been created....
if( action->entry ) {
// Widget may not have been created....
if( action->entry ) {
- gtk_entry_set_width_chars( GTK_ENTRY(action->entry), width );
+ gtk_entry_set_width_chars( GTK_ENTRY(action->entry), entry_width );
+ }
+}
+
+void ink_comboboxentry_action_set_extra_width( Ink_ComboBoxEntry_Action* action, gint extra_width ) {
+
+ action->extra_width = extra_width;
+
+ // Widget may not have been created....
+ if( action->combobox ) {
+ GtkRequisition req;
+ gtk_widget_size_request( GTK_WIDGET( action->combobox ), &req );
+ gtk_widget_set_size_request( GTK_WIDGET( action->combobox ), req.width + action->extra_width, -1 );
}
}
}
}
if( action->entry_completion ) {
gtk_object_destroy( GTK_OBJECT( action->entry_completion ) );
if( action->entry_completion ) {
gtk_object_destroy( GTK_OBJECT( action->entry_completion ) );
+ action->entry_completion = 0;
}
}
}
}
gtk_entry_set_icon_tooltip_text( GTK_ENTRY(action->entry),
GTK_ENTRY_ICON_SECONDARY,
action->warning );
gtk_entry_set_icon_tooltip_text( GTK_ENTRY(action->entry),
GTK_ENTRY_ICON_SECONDARY,
action->warning );
+#else // GTK_CHECK_VERSION(2,16,0)
+ gtk_image_set_from_stock( GTK_IMAGE(action->indicator), action->warning ? GTK_STOCK_DIALOG_WARNING : 0, GTK_ICON_SIZE_SMALL_TOOLBAR );
#endif // GTK_CHECK_VERSION(2,16,0)
}
}
#endif // GTK_CHECK_VERSION(2,16,0)
}
}