From d0f273eb94489f7c0e0c8b57c1d07c3f1a2f66a2 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 13:44:12 -0500 Subject: fix typo so timezone labels show up --- src/indicator-datetime.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index a9b77b9..6c9ac55 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1253,14 +1253,14 @@ new_timezone_item(DbusmenuMenuitem * newitem, gtk_widget_show(mi_data->radio); /* Label, probably a username, chat room or mailbox name */ - mi_data->label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, APPOINTMENT_MENUITEM_PROP_LABEL)); + mi_data->label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, TIMEZONE_MENUITEM_PROP_LABEL)); gtk_misc_set_alignment(GTK_MISC(mi_data->label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), mi_data->label, TRUE, TRUE, 0); gtk_widget_show(mi_data->label); /* Usually either the time or the count on the individual item. */ - mi_data->right = gtk_label_new(dbusmenu_menuitem_property_get(newitem, APPOINTMENT_MENUITEM_PROP_RIGHT)); + mi_data->right = gtk_label_new(dbusmenu_menuitem_property_get(newitem, TIMEZONE_MENUITEM_PROP_RIGHT)); gtk_size_group_add_widget(indicator_right_group, mi_data->right); gtk_misc_set_alignment(GTK_MISC(mi_data->right), 1.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox), mi_data->right, FALSE, FALSE, 0); -- cgit v1.2.3 From 36b4e93794c845e5caac71556b9a05d7e474d35a Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 14:41:43 -0500 Subject: use a GtkCheckMenuItem, not a GtkRadioButton, to render timezone items --- src/indicator-datetime.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 6c9ac55..2a309d2 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -105,7 +105,6 @@ enum { typedef struct _indicator_item_t indicator_item_t; struct _indicator_item_t { - GtkWidget * radio; GtkWidget * icon; GtkWidget * label; GtkWidget * right; @@ -176,7 +175,6 @@ static void update_time (IndicatorDatetime * self); static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data); static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); static gint generate_strftime_bitmask (const char *time_str); -static GSList *location_group = NULL; /* Indicator Module Config */ INDICATOR_SET_VERSION @@ -1238,20 +1236,14 @@ new_timezone_item(DbusmenuMenuitem * newitem, // Menu item with a radio button and a right aligned time indicator_item_t * mi_data = g_new0(indicator_item_t, 1); - GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_check_menu_item_new()); + + gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(gmi), TRUE); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gmi), + dbusmenu_menuitem_property_get_bool(newitem, TIMEZONE_MENUITEM_PROP_RADIO)); GtkWidget * hbox = gtk_hbox_new(FALSE, 4); - mi_data->radio = gtk_radio_button_new(location_group); - if (location_group == NULL) - location_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(mi_data->radio)); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mi_data->radio), - dbusmenu_menuitem_property_get_bool(newitem, TIMEZONE_MENUITEM_PROP_RADIO)); - - gtk_box_pack_start(GTK_BOX(hbox), mi_data->radio, FALSE, FALSE, 0); - gtk_widget_show(mi_data->radio); - /* Label, probably a username, chat room or mailbox name */ mi_data->label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, TIMEZONE_MENUITEM_PROP_LABEL)); gtk_misc_set_alignment(GTK_MISC(mi_data->label), 0.0, 0.5); -- cgit v1.2.3 From 030ba7689c5dabac3a0d84bb55c8fcec7d87737b Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 14:51:00 -0500 Subject: fix typo that prevented old locations from being deleted --- src/datetime-service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 10f53df..0117be1 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -367,10 +367,10 @@ update_timezone_menu_items(gpointer user_data) { /* Remove all of the previous locations */ if (dconflocations != NULL) { g_debug("Freeing old locations"); - while (appointments != NULL) { + while (dconflocations != NULL) { DbusmenuMenuitem * litem = DBUSMENU_MENUITEM(dconflocations->data); g_debug("Freeing old location: %p", litem); - // Remove all the existing menu items which are in appointments. + // Remove all the existing menu items which are in dconflocations. dconflocations = g_list_remove(dconflocations, litem); dbusmenu_menuitem_child_delete(root, DBUSMENU_MENUITEM(litem)); g_object_unref(G_OBJECT(litem)); -- cgit v1.2.3 From f704c6178715e68128e324490660aea5014eb2f7 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 14:53:47 -0500 Subject: show current or geo location if we are going to use them --- src/datetime-service.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 0117be1..3c84551 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -148,6 +148,7 @@ check_timezone_sync (void) { dbusmenu_menuitem_property_set (current_location, TIMEZONE_MENUITEM_PROP_LABEL, label); // TODO work out the current time at that location dbusmenu_menuitem_property_set (current_location, TIMEZONE_MENUITEM_PROP_RIGHT, "+tzone"); + dbusmenu_menuitem_property_set_bool (current_location, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); } else { g_debug("Label for current location is null, this shouldn't happen"); } @@ -156,6 +157,7 @@ check_timezone_sync (void) { dbusmenu_menuitem_property_set (geo_location, TIMEZONE_MENUITEM_PROP_LABEL, geo_timezone); // TODO work out the current time at that location dbusmenu_menuitem_property_set (geo_location, TIMEZONE_MENUITEM_PROP_RIGHT, "+tzone"); + dbusmenu_menuitem_property_set_bool (geo_location, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); } } else { // TODO work out the geo location name in a nice way -- cgit v1.2.3 From 02f8926f9c00954625a57e8d5d650e2523b98154 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:06:33 -0500 Subject: add preference zones in order, after current timezone --- src/datetime-service.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 3c84551..2db6421 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -364,7 +364,7 @@ update_timezone_menu_items(gpointer user_data) { } guint len = g_strv_length(locations); DbusmenuMenuitem *item; - gint i; + gint i, offset; /* Remove all of the previous locations */ if (dconflocations != NULL) { @@ -390,6 +390,7 @@ update_timezone_menu_items(gpointer user_data) { return FALSE; } + offset = dbusmenu_menuitem_get_position (current_location, root)+1; for (i = 0; i < len; i++) { // Iterate over configured places and add any which aren't already listed if (g_strcmp0(locations[i], current_timezone) != 0 && @@ -402,8 +403,7 @@ update_timezone_menu_items(gpointer user_data) { dbusmenu_menuitem_property_set_bool (item, TIMEZONE_MENUITEM_PROP_RADIO, FALSE); dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); - dbusmenu_menuitem_child_add_position (root, item, - dbusmenu_menuitem_get_position (locations_separator, root)+3); + dbusmenu_menuitem_child_add_position (root, item, offset++); //g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); dconflocations = g_list_append(dconflocations, item); } -- cgit v1.2.3 From 67264a791f282ac18eba02af4df73f71c9736886 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:10:49 -0500 Subject: start with current timezone selected --- src/datetime-service.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 2db6421..795403f 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -149,6 +149,7 @@ check_timezone_sync (void) { // TODO work out the current time at that location dbusmenu_menuitem_property_set (current_location, TIMEZONE_MENUITEM_PROP_RIGHT, "+tzone"); dbusmenu_menuitem_property_set_bool (current_location, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); + dbusmenu_menuitem_property_set_bool(current_location, TIMEZONE_MENUITEM_PROP_RADIO, TRUE); } else { g_debug("Label for current location is null, this shouldn't happen"); } -- cgit v1.2.3 From 6bc13b2d4f6cab5a349a072d256dcb55418c6ef2 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:32:56 -0500 Subject: re-enable setting the timezone when clicking --- src/datetime-service.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 795403f..432657d 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -216,7 +216,7 @@ update_current_timezone (void) { return; } -/* See how our timezone setting went +/* See how our timezone setting went */ static void quick_set_tz_cb (OobsObject * obj, OobsResult result, gpointer user_data) { @@ -226,26 +226,27 @@ quick_set_tz_cb (OobsObject * obj, OobsResult result, gpointer user_data) g_warning("Unable to quick set timezone"); } return; -}*/ +} -/* Set the timezone to the Geoclue discovered one +/* Set the timezone to the Geoclue discovered one */ static void -quick_set_tz (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) +quick_set_tz (DbusmenuMenuitem * menuitem, guint timestamp, gpointer user_data) { - g_debug("Quick setting timezone to: %s", geo_timezone); + const gchar * tz = dbusmenu_menuitem_property_get(menuitem, TIMEZONE_MENUITEM_PROP_LABEL); + g_debug("Quick setting timezone to: %s", tz); - g_return_if_fail(geo_timezone != NULL); + g_return_if_fail(tz != NULL); OobsObject * obj = oobs_time_config_get(); g_return_if_fail(obj != NULL); OobsTimeConfig * timeconfig = OOBS_TIME_CONFIG(obj); - oobs_time_config_set_timezone(timeconfig, geo_timezone); + oobs_time_config_set_timezone(timeconfig, tz); oobs_object_commit_async(obj, quick_set_tz_cb, NULL); return; -}*/ +} /* Updates the label in the date menuitem */ static gboolean @@ -405,7 +406,7 @@ update_timezone_menu_items(gpointer user_data) { dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); dbusmenu_menuitem_property_set_bool (item, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); dbusmenu_menuitem_child_add_position (root, item, offset++); - //g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); dconflocations = g_list_append(dconflocations, item); } } @@ -694,7 +695,7 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set (geo_location, TIMEZONE_MENUITEM_PROP_LABEL, "Updating location information..."); dbusmenu_menuitem_property_set_bool (geo_location, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); dbusmenu_menuitem_property_set_bool (geo_location, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); - //g_signal_connect(G_OBJECT(geo_location), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); + g_signal_connect(G_OBJECT(geo_location), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); dbusmenu_menuitem_child_append(root, geo_location); current_location = dbusmenu_menuitem_new(); @@ -702,7 +703,7 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set (current_location, TIMEZONE_MENUITEM_PROP_LABEL, "Current Timezone"); dbusmenu_menuitem_property_set_bool (current_location, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); dbusmenu_menuitem_property_set_bool (current_location, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); - //g_signal_connect(G_OBJECT(current_location), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); + g_signal_connect(G_OBJECT(current_location), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL); dbusmenu_menuitem_child_append(root, current_location); check_timezone_sync(); -- cgit v1.2.3 From fe51dffdecdaeca76ae8dd0c7e736cd7d56bf3a3 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:41:19 -0500 Subject: in prop_cb, value is a GVariant, not a string, which explains why we sometimes get bogus strings in the menu --- src/indicator-datetime.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 2a309d2..6d5afc0 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1068,14 +1068,14 @@ generate_format_string (IndicatorDatetime * self) /* Whenever we have a property change on a DbusmenuMenuitem we need to be responsive to that. */ static void -indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, indicator_item_t * mi_data) +indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, indicator_item_t * mi_data) { if (!g_strcmp0(prop, APPOINTMENT_MENUITEM_PROP_LABEL)) { /* Set the main label */ - gtk_label_set_text(GTK_LABEL(mi_data->label), value); + gtk_label_set_text(GTK_LABEL(mi_data->label), g_variant_get_string(value, NULL)); } else if (!g_strcmp0(prop, APPOINTMENT_MENUITEM_PROP_RIGHT)) { /* Set the right label */ - gtk_label_set_text(GTK_LABEL(mi_data->right), value); + gtk_label_set_text(GTK_LABEL(mi_data->right), g_variant_get_string(value, NULL)); } else if (!g_strcmp0(prop, APPOINTMENT_MENUITEM_PROP_ICON)) { /* We don't use the value here, which is probably less efficient, but it's easier to use the easy function. And since th value @@ -1106,12 +1106,12 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, in } } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_LABEL)) { /* Set the main label */ - gtk_label_set_text(GTK_LABEL(mi_data->label), value); + gtk_label_set_text(GTK_LABEL(mi_data->label), g_variant_get_string(value, NULL)); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RIGHT)) { /* Set the right label */ - gtk_label_set_text(GTK_LABEL(mi_data->right), value); + gtk_label_set_text(GTK_LABEL(mi_data->right), g_variant_get_string(value, NULL)); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RADIO)) { - //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mi_data->radio), value); + //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mi_data->radio), g_variant_get_boolean(value)); } else { g_warning("Indicator Item property '%s' unknown", prop); } -- cgit v1.2.3 From 07e4b46e4a8ee9607919ad28af4f26fb036eb57e Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:48:55 -0500 Subject: record which gmi goes with with dbusmenuitem and use that to properly watch radio-active property changes --- src/indicator-datetime.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 6d5afc0..f396665 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -105,6 +105,7 @@ enum { typedef struct _indicator_item_t indicator_item_t; struct _indicator_item_t { + GtkWidget * gmi; GtkWidget * icon; GtkWidget * label; GtkWidget * right; @@ -1111,7 +1112,7 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, /* Set the right label */ gtk_label_set_text(GTK_LABEL(mi_data->right), g_variant_get_string(value, NULL)); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RADIO)) { - //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mi_data->radio), g_variant_get_boolean(value)); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi_data->gmi), g_variant_get_boolean(value)); } else { g_warning("Indicator Item property '%s' unknown", prop); } @@ -1133,7 +1134,7 @@ new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbu indicator_item_t * mi_data = g_new0(indicator_item_t, 1); - GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + mi_data->gmi = gtk_menu_item_new(); GtkWidget * hbox = gtk_hbox_new(FALSE, 4); @@ -1184,10 +1185,10 @@ new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbu gtk_box_pack_start(GTK_BOX(hbox), mi_data->right, FALSE, FALSE, 0); gtk_widget_show(mi_data->right); - gtk_container_add(GTK_CONTAINER(gmi), hbox); + gtk_container_add(GTK_CONTAINER(mi_data->gmi), hbox); gtk_widget_show(hbox); - dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(mi_data->gmi), parent); g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), mi_data); g_signal_connect_swapped(G_OBJECT(newitem), "destroyed", G_CALLBACK(g_free), mi_data); @@ -1236,10 +1237,10 @@ new_timezone_item(DbusmenuMenuitem * newitem, // Menu item with a radio button and a right aligned time indicator_item_t * mi_data = g_new0(indicator_item_t, 1); - GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_check_menu_item_new()); + mi_data->gmi = gtk_check_menu_item_new(); - gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(gmi), TRUE); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gmi), + gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(mi_data->gmi), TRUE); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi_data->gmi), dbusmenu_menuitem_property_get_bool(newitem, TIMEZONE_MENUITEM_PROP_RADIO)); GtkWidget * hbox = gtk_hbox_new(FALSE, 4); @@ -1258,10 +1259,10 @@ new_timezone_item(DbusmenuMenuitem * newitem, gtk_box_pack_start(GTK_BOX(hbox), mi_data->right, FALSE, FALSE, 0); gtk_widget_show(mi_data->right); - gtk_container_add(GTK_CONTAINER(gmi), hbox); + gtk_container_add(GTK_CONTAINER(mi_data->gmi), hbox); gtk_widget_show(hbox); - dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(mi_data->gmi), parent); g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), mi_data); g_signal_connect_swapped(G_OBJECT(newitem), "destroyed", G_CALLBACK(g_free), mi_data); -- cgit v1.2.3 From 02fcae957feca3cefd3c950c265fab03c5b1177c Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 15:52:09 -0500 Subject: ignore timezone switches if nothing to do --- src/datetime-service.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/datetime-service.c b/src/datetime-service.c index 432657d..0894e83 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -233,10 +233,14 @@ static void quick_set_tz (DbusmenuMenuitem * menuitem, guint timestamp, gpointer user_data) { const gchar * tz = dbusmenu_menuitem_property_get(menuitem, TIMEZONE_MENUITEM_PROP_LABEL); + g_debug("Quick setting timezone to: %s", tz); g_return_if_fail(tz != NULL); + if (g_strcmp0(tz, current_timezone) == 0) + return; + OobsObject * obj = oobs_time_config_get(); g_return_if_fail(obj != NULL); -- cgit v1.2.3 From 9bb32e21e00cbccd6fc7676c3d75cf34f8f6087b Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 16:19:03 -0500 Subject: make sure gmi-radio-active state is always in sync with the dbusmenu-radio-active state --- src/indicator-datetime.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index f396665..13c39f8 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1224,6 +1224,22 @@ new_calendar_item (DbusmenuMenuitem * newitem, return TRUE; } +static void +timezone_toggled_cb (GtkCheckMenuItem *checkmenuitem, DbusmenuMenuitem * dbusitem) +{ + /* Make sure that the displayed radio-active setting is always + consistent with the dbus menuitem */ + gtk_check_menu_item_set_active(checkmenuitem, + dbusmenu_menuitem_property_get_bool(dbusitem, TIMEZONE_MENUITEM_PROP_RADIO)); +} + +static void +timezone_destroyed_cb (DbusmenuMenuitem * dbusitem, indicator_item_t * mi_data) +{ + g_signal_handlers_disconnect_by_func(G_OBJECT(mi_data->gmi), G_CALLBACK(timezone_toggled_cb), dbusitem); + g_free(mi_data); +} + static gboolean new_timezone_item(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, @@ -1264,8 +1280,9 @@ new_timezone_item(DbusmenuMenuitem * newitem, dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(mi_data->gmi), parent); + g_signal_connect(G_OBJECT(mi_data->gmi), "toggled", G_CALLBACK(timezone_toggled_cb), newitem); g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), mi_data); - g_signal_connect_swapped(G_OBJECT(newitem), "destroyed", G_CALLBACK(g_free), mi_data); + g_signal_connect_swapped(G_OBJECT(newitem), "destroyed", G_CALLBACK(timezone_destroyed_cb), mi_data); return TRUE; } -- cgit v1.2.3 From 37fc0a3158e5ff5f8cf9096de49451379c2d11f1 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 15 Feb 2011 16:42:13 -0500 Subject: whoops, don't connect destroyed signal as swapped --- src/indicator-datetime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 13c39f8..0f60428 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1282,7 +1282,7 @@ new_timezone_item(DbusmenuMenuitem * newitem, g_signal_connect(G_OBJECT(mi_data->gmi), "toggled", G_CALLBACK(timezone_toggled_cb), newitem); g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), mi_data); - g_signal_connect_swapped(G_OBJECT(newitem), "destroyed", G_CALLBACK(timezone_destroyed_cb), mi_data); + g_signal_connect(G_OBJECT(newitem), "destroyed", G_CALLBACK(timezone_destroyed_cb), mi_data); return TRUE; } -- cgit v1.2.3