diff options
author | Ted Gould <ted@gould.cx> | 2009-12-16 23:17:59 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2009-12-16 23:17:59 -0600 |
commit | 186e1058f5142308a02ecf20ed4653a7862cd973 (patch) | |
tree | 041c63e7be4c239f9f9138d7452ada421d2b8760 /libdbusmenu-gtk/genericmenuitem.c | |
parent | f55f6bc97d2f5b3b8d6a68d6a2e6fda15a1d5320 (diff) | |
download | libdbusmenu-186e1058f5142308a02ecf20ed4653a7862cd973.tar.gz libdbusmenu-186e1058f5142308a02ecf20ed4653a7862cd973.tar.bz2 libdbusmenu-186e1058f5142308a02ecf20ed4653a7862cd973.zip |
Adding in an activate function so that we don't toggle our value on click. We're letting the application handle that. But, in turn, it turns out that is the only way to set the active property. So without an activate function, we can't set it. So, we're taking a lot more responsibility for setting it properly when we want to.
Diffstat (limited to 'libdbusmenu-gtk/genericmenuitem.c')
-rw-r--r-- | libdbusmenu-gtk/genericmenuitem.c | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 3f7f22d..09d5004 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -26,6 +26,7 @@ static void genericmenuitem_finalize (GObject *object); static void draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area); static void set_label (GtkMenuItem * menu_item, const gchar * label); static const gchar * get_label (GtkMenuItem * menu_item); +static void activate (GtkMenuItem * menu_item); /* GObject stuff */ G_DEFINE_TYPE (Genericmenuitem, genericmenuitem, GTK_TYPE_CHECK_MENU_ITEM); @@ -53,6 +54,7 @@ genericmenuitem_class_init (GenericmenuitemClass *klass) GtkMenuItemClass * menuitem_class = GTK_MENU_ITEM_CLASS (klass); menuitem_class->set_label = set_label; menuitem_class->get_label = get_label; + menuitem_class->activate = activate; return; } @@ -162,6 +164,14 @@ get_label (GtkMenuItem * menu_item) return NULL; } +/* Make sure we don't toggle when there is an + activate like a normal check menu item. */ +static void +activate (GtkMenuItem * menu_item) +{ + return; +} + /** genericmenuitem_set_check_type: @item: #Genericmenuitem to set the type on @@ -223,33 +233,38 @@ genericmenuitem_set_state (Genericmenuitem * item, GenericmenuitemState state) } item->priv->state = state; - GValue value = {0}; - g_value_init(&value, G_TYPE_BOOLEAN); + + GtkCheckMenuItem * check = GTK_CHECK_MENU_ITEM(item); + + gboolean old_active = check->active; + gboolean old_inconsist = check->inconsistent; switch (item->priv->state) { case GENERICMENUITEM_STATE_UNCHECKED: - g_value_set_boolean(&value, FALSE); - g_object_set_property(G_OBJECT(item), "active", &value); - g_value_set_boolean(&value, FALSE); - g_object_set_property(G_OBJECT(item), "inconsistent", &value); + check->active = FALSE; + check->inconsistent = FALSE; break; case GENERICMENUITEM_STATE_CHECKED: - g_value_set_boolean(&value, TRUE); - g_object_set_property(G_OBJECT(item), "active", &value); - g_value_set_boolean(&value, FALSE); - g_object_set_property(G_OBJECT(item), "inconsistent", &value); + check->active = TRUE; + check->inconsistent = FALSE; break; case GENERICMENUITEM_STATE_INDETERMINATE: - g_value_set_boolean(&value, TRUE); - g_object_set_property(G_OBJECT(item), "active", &value); - g_value_set_boolean(&value, TRUE); - g_object_set_property(G_OBJECT(item), "inconsistent", &value); + check->active = TRUE; + check->inconsistent = TRUE; break; default: g_warning("Generic Menuitem invalid check state: %d", state); return; } + if (old_active != check->active) { + g_object_notify(G_OBJECT(item), "active"); + } + + if (old_inconsist != check->inconsistent) { + g_object_notify(G_OBJECT(item), "inconsistent"); + } + gtk_widget_queue_draw(GTK_WIDGET(item)); return; |