diff -up gnome-panel-2.21.91/applets/clock/clock.c.less-resizing gnome-panel-2.21.91/applets/clock/clock.c --- gnome-panel-2.21.91/applets/clock/clock.c.less-resizing 2008-02-20 11:46:30.000000000 -0500 +++ gnome-panel-2.21.91/applets/clock/clock.c 2008-02-20 11:46:30.000000000 -0500 @@ -1074,6 +1074,7 @@ location_tile_timezone_set_cb (ClockLoca ClockData *cd = data; clock_map_refresh (CLOCK_MAP (cd->map_widget)); + update_location_tiles (cd); } static void diff -up gnome-panel-2.21.91/applets/clock/clock-location-tile.c.less-resizing gnome-panel-2.21.91/applets/clock/clock-location-tile.c --- gnome-panel-2.21.91/applets/clock/clock-location-tile.c.less-resizing 2008-02-20 11:46:30.000000000 -0500 +++ gnome-panel-2.21.91/applets/clock/clock-location-tile.c 2008-02-20 12:03:00.000000000 -0500 @@ -42,6 +42,8 @@ typedef struct { GtkWidget *current_button; GtkWidget *current_label; GtkWidget *current_marker; + GtkWidget *current_spacer; + GtkSizeGroup *current_group; GtkSizeGroup *button_group; GtkWidget *weather_icon; @@ -157,6 +159,11 @@ clock_location_tile_finalize (GObject *g priv->button_group = NULL; } + if (priv->current_group) { + g_object_unref (priv->current_group); + priv->current_group = NULL; + } + G_OBJECT_CLASS (clock_location_tile_parent_class)->finalize (g_obj); } @@ -213,25 +220,43 @@ enter_or_leave_tile (GtkWidget if (event->mode != GDK_CROSSING_NORMAL) { return TRUE; } + + if (clock_location_is_current (priv->location)) { + gtk_widget_hide (priv->current_button); + gtk_widget_hide (priv->current_spacer); + gtk_widget_show (priv->current_marker); + + return TRUE; + } + if (event->type == GDK_ENTER_NOTIFY) { - gint can_set; + gint can_set; can_set = can_set_system_timezone (); - if (!clock_location_is_current (priv->location) && - can_set != 0) { + if (can_set != 0) { gtk_label_set_markup (GTK_LABEL (priv->current_label), can_set == 1 ? _("Set...") : - _("Set")); + _("Set")); + gtk_widget_hide (priv->current_spacer); + gtk_widget_hide (priv->current_marker); gtk_widget_show (priv->current_button); } - } - else { - if (event->detail != GDK_NOTIFY_INFERIOR) - gtk_widget_hide (priv->current_button); - } + else { + gtk_widget_hide (priv->current_marker); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_spacer); + } + } + else { + if (event->detail != GDK_NOTIFY_INFERIOR) { + gtk_widget_hide (priv->current_button); + gtk_widget_hide (priv->current_marker); + gtk_widget_show (priv->current_spacer); + } + } - return TRUE; + return TRUE; } static void @@ -241,6 +266,7 @@ clock_location_tile_fill (ClockLocationT GtkWidget *align; GtkWidget *strut; GtkWidget *box; + gint can_set; priv->box = gtk_event_box_new (); @@ -278,8 +304,16 @@ clock_location_tile_fill (ClockLocationT gtk_box_pack_start (GTK_BOX (box), align, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (box), priv->time_label, FALSE, FALSE, 0); + can_set = can_set_system_timezone (); + priv->current_button = gtk_button_new (); priv->current_label = gtk_label_new (""); + if (can_set != 0) { + gtk_label_set_markup (GTK_LABEL (priv->current_label), + can_set == 1 ? + _("Set...") : + _("Set")); + } gtk_widget_show (priv->current_label); gtk_widget_set_no_show_all (priv->current_button, TRUE); gtk_container_add (GTK_CONTAINER (priv->current_button), priv->current_label); @@ -289,15 +323,29 @@ clock_location_tile_fill (ClockLocationT gtk_misc_set_alignment (GTK_MISC (priv->current_marker), 1.0, 0.5); gtk_widget_set_no_show_all (priv->current_marker, TRUE); + priv->current_spacer = gtk_event_box_new (); + gtk_widget_set_no_show_all (priv->current_spacer, TRUE); + strut = gtk_event_box_new (); gtk_box_pack_start (GTK_BOX (box), strut, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), priv->current_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (box), priv->current_marker, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), priv->current_spacer, FALSE, FALSE, 0); priv->button_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); gtk_size_group_set_ignore_hidden (priv->button_group, FALSE); gtk_size_group_add_widget (priv->button_group, strut); gtk_size_group_add_widget (priv->button_group, priv->current_button); + priv->current_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); + gtk_size_group_set_ignore_hidden (priv->current_group, FALSE); + gtk_size_group_add_widget (priv->current_group, priv->current_button); + gtk_size_group_add_widget (priv->current_group, priv->current_marker); + gtk_size_group_add_widget (priv->current_group, priv->current_spacer); + + gtk_widget_show (priv->current_button); + gtk_widget_show (priv->current_marker); + gtk_widget_show (priv->current_spacer); + g_signal_connect (priv->current_button, "clicked", G_CALLBACK (make_current), this); @@ -443,11 +491,16 @@ clock_location_tile_refresh (ClockLocati g_return_if_fail (IS_CLOCK_LOCATION_TILE (this)); if (clock_location_is_current (priv->location)) { - gtk_widget_hide (priv->current_button); - gtk_widget_show (priv->current_marker); - } - else { - gtk_widget_hide (priv->current_marker); + gtk_widget_hide (priv->current_spacer); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_marker); + } + else { + if (GTK_WIDGET_VISIBLE (priv->current_marker)) { + gtk_widget_hide (priv->current_marker); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_spacer); + } } if (clock_needs_face_refresh (this)) {