Репозитории ALT
S: | 3.50.0-alt1 |
5.1: | 2.26.3-alt4 |
4.1: | 2.22.2-alt0.M41.2 |
4.0: | 2.16.2-alt1 |
3.0: | 2.10.2-alt1 |
Другие репозитории
Upstream: | 2.22.0 |
Группа :: Графические оболочки/GNOME
Пакет: gnome-panel
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: gnome-panel-2.14-clock-orientation.patch
Скачать
Скачать
--- gnome-panel-2.14.1/applets/clock/clock.c 2006-06-25 15:59:11.519432690 +0200
+++ fixed/gnome-panel-2.14.1/applets/clock/clock.c 2006-06-25 15:36:20.023830399 +0200
@@ -145,6 +145,8 @@ struct _ClockData {
guint timeout;
PanelAppletOrient orient;
int size;
+ int width;
+ int height;
GtkAllocation old_allocation;
int fixed_width;
@@ -189,6 +192,36 @@ unfix_size (ClockData *cd)
gtk_widget_queue_resize (cd->toggle);
}
+static int
+calculate_minimum_width (GtkWidget *widget,
+ PanelAppletOrient orientation,
+ const gchar *text)
+{
+ PangoContext *context;
+ PangoLayout *layout;
+ int width, height;
+ int focus_width = 0;
+ int focus_pad = 0;
+
+ context = gtk_widget_get_pango_context (widget);
+
+ layout = pango_layout_new (context);
+ pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT);
+ pango_layout_set_text (layout, text, -1);
+ pango_layout_get_pixel_size (layout, &width, &height);
+ g_object_unref (G_OBJECT (layout));
+ layout = NULL;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ width += 2*(focus_width+focus_pad+widget->style->xthickness);
+
+ return width;
+}
+
static void
set_tooltip (GtkWidget *applet,
GtkWidget *widget,
@@ -434,6 +467,7 @@ update_clock (ClockData * cd)
set_tooltip (cd->applet, cd->toggle, _("Click to view month calendar"));
#endif
}
+ update_orient (cd);
}
static void
@@ -1693,14 +1727,6 @@ create_clock_widget (ClockData *cd)
cd->orient = panel_applet_get_orient (PANEL_APPLET (cd->applet));
- /* Initialize label orientation */
- if (cd->orient == PANEL_APPLET_ORIENT_RIGHT)
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 90);
- else if (cd->orient == PANEL_APPLET_ORIENT_LEFT)
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 270);
- else
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 0);
-
cd->size = panel_applet_get_size (PANEL_APPLET (cd->applet));
g_signal_connect (G_OBJECT(clock), "destroy",
@@ -1714,8 +1740,23 @@ create_clock_widget (ClockData *cd)
refresh_clock_timeout(cd);
}
-/* this is when the panel orientation changes */
+static void update_orient (ClockData *cd)
+{
+ const gchar *text;
+ int min_width;
+
+ text=gtk_label_get_text (GTK_LABEL (cd->clockw));
+ min_width=calculate_minimum_width(cd->applet, cd->orient, text);
+ if (cd->orient == PANEL_APPLET_ORIENT_LEFT && min_width>cd->width)
+ gtk_label_set_angle (GTK_LABEL (cd->clockw), 270);
+ else if (cd->orient == PANEL_APPLET_ORIENT_RIGHT && min_width>cd->width)
+ gtk_label_set_angle (GTK_LABEL (cd->clockw), 90);
+ else
+ gtk_label_set_angle (GTK_LABEL (cd->clockw), 0);
+}
+
+/* this is when the panel orientation changes */
static void
applet_change_orient (PanelApplet *applet,
PanelAppletOrient orient,
@@ -1723,13 +1764,6 @@ applet_change_orient (PanelApplet
{
cd->orient = orient;
- if (cd->orient == PANEL_APPLET_ORIENT_RIGHT)
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 90);
- else if (cd->orient == PANEL_APPLET_ORIENT_LEFT)
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 270);
- else
- gtk_label_set_angle (GTK_LABEL (cd->clockw), 0);
-
unfix_size (cd);
update_clock (cd);
update_popup (cd);
@@ -1737,22 +1771,15 @@ applet_change_orient (PanelApplet
/* this is when the panel size changes */
static void
-applet_change_pixel_size (PanelApplet *applet,
+applet_change_pixel_size (PanelApplet *applet,
GtkAllocation *allocation,
- ClockData *cd)
+ ClockData *cd)
{
- int new_size;
-
- if (cd->orient == PANEL_APPLET_ORIENT_LEFT ||
- cd->orient == PANEL_APPLET_ORIENT_RIGHT)
- new_size = allocation->width;
- else
- new_size = allocation->height;
-
- if (cd->size == new_size)
- return;
+ if (cd->width == allocation->width && cd->height == allocation->height) return;
- cd->size = new_size;
+ cd->width = allocation->width;
+ cd->height = allocation->height;
+ cd->size = panel_applet_get_size (applet);
unfix_size (cd);
update_timeformat (cd);
@@ -2307,7 +2334,7 @@ fill_clock_applet (PanelApplet *applet)
cd);
g_signal_connect (G_OBJECT (cd->applet),
- "size-allocate",
+ "size_allocate",
G_CALLBACK (applet_change_pixel_size),
cd);