aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/genericmenuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2009-12-16 23:17:59 -0600
committerTed Gould <ted@gould.cx>2009-12-16 23:17:59 -0600
commit186e1058f5142308a02ecf20ed4653a7862cd973 (patch)
tree041c63e7be4c239f9f9138d7452ada421d2b8760 /libdbusmenu-gtk/genericmenuitem.c
parentf55f6bc97d2f5b3b8d6a68d6a2e6fda15a1d5320 (diff)
downloadlibdbusmenu-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.c43
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;