From eb76b5126a8bbc66627c36e132b721f479751591 Mon Sep 17 00:00:00 2001 From: Andrzej Date: Mon, 23 Apr 2012 04:04:32 +0900 Subject: [PATCH] Panel 4.10 compatibility fixes. Missing bit: rotating the label in a vertical mode. Differences from 4.8 (beside scaling down the size nrows times): - for consistency the plugin button shape is always square; this requires further (0.75x) scaling down of the icon or label size. --- panel-plugin/xfce4-xkb-plugin.c | 26 ++++++++++++++++++++++++-- panel-plugin/xfce4-xkb-plugin.h | 7 +++++++ panel-plugin/xkb-callbacks.c | 15 +++++++++++++-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/panel-plugin/xfce4-xkb-plugin.c b/panel-plugin/xfce4-xkb-plugin.c index 6a0635a..ac98725 100644 --- a/panel-plugin/xfce4-xkb-plugin.c +++ b/panel-plugin/xfce4-xkb-plugin.c @@ -90,6 +90,10 @@ xfce_xkb_construct (XfcePanelPlugin *plugin) t_xkb *xkb = xkb_new (plugin); xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); +#ifdef HAS_PANEL_49 + xfce_panel_plugin_set_small (plugin, TRUE); +#endif + g_signal_connect (plugin, "orientation-changed", G_CALLBACK (xfce_xkb_orientation_changed), xkb); @@ -117,14 +121,24 @@ xfce_xkb_orientation_changed (XfcePanelPlugin *plugin, GtkOrientation orientation, t_xkb *xkb) { - xkb_calculate_sizes (xkb, orientation, xfce_panel_plugin_get_size (plugin)); + gint size = xfce_panel_plugin_get_size (plugin); + +#ifdef HAS_PANEL_49 + size /= xfce_panel_plugin_get_nrows (plugin); +#endif + + xkb_calculate_sizes (xkb, orientation, size); } static gboolean xfce_xkb_set_size (XfcePanelPlugin *plugin, gint size, t_xkb *xkb) { - return xkb_calculate_sizes (xkb, xfce_panel_plugin_get_orientation (plugin), size); +#ifdef HAS_PANEL_49 + size /= xfce_panel_plugin_get_nrows (plugin); +#endif + + return xkb_calculate_sizes (xkb, xfce_panel_plugin_get_orientation (plugin), size); } static void @@ -340,12 +354,20 @@ xkb_calculate_sizes (t_xkb *xkb, GtkOrientation orientation, gint panel_size) { case GTK_ORIENTATION_HORIZONTAL: xkb->vsize = panel_size; +#ifdef HAS_PANEL_49 + xkb->hsize = panel_size; +#else xkb->hsize = (int) (1.33 * panel_size); +#endif gtk_widget_set_size_request (xkb->btn, xkb->hsize, xkb->vsize); break; case GTK_ORIENTATION_VERTICAL: xkb->hsize = panel_size; +#ifdef HAS_PANEL_49 + xkb->vsize = panel_size; +#else xkb->vsize = (int) (0.75 * panel_size); +#endif if (xkb->vsize < 10) xkb->vsize = 10; gtk_widget_set_size_request (xkb->btn, xkb->hsize, xkb->vsize); break; diff --git a/panel-plugin/xfce4-xkb-plugin.h b/panel-plugin/xfce4-xkb-plugin.h index ef9b995..fe0f9b1 100644 --- a/panel-plugin/xfce4-xkb-plugin.h +++ b/panel-plugin/xfce4-xkb-plugin.h @@ -36,6 +36,13 @@ #include #include +/* check for new Xfce 4.10 panel features */ +#ifdef LIBXFCE4PANEL_CHECK_VERSION +#if LIBXFCE4PANEL_CHECK_VERSION (4,9,0) +#define HAS_PANEL_49 +#endif +#endif + typedef enum { DISPLAY_TYPE_IMAGE = 0, diff --git a/panel-plugin/xkb-callbacks.c b/panel-plugin/xkb-callbacks.c index d12e086..41fdb1e 100644 --- a/panel-plugin/xkb-callbacks.c +++ b/panel-plugin/xkb-callbacks.c @@ -104,10 +104,13 @@ xkb_plugin_layout_image_exposed (GtkWidget *widget, GtkStyle *style; GdkColor fgcolor; gint actual_hsize, actual_vsize; + gint vsize; actual_hsize = (xkb->button_hsize > xkb->hsize) ? xkb->button_hsize : xkb->hsize; actual_vsize = (xkb->button_vsize > xkb->vsize) ? xkb->button_vsize : xkb->vsize; + vsize = MIN (xkb->vsize, (int) (xkb->hsize * 0.75)); + cr = gdk_cairo_create ((GTK_WIDGET (xkb->layout_image))->window); style = gtk_widget_get_style (GTK_WIDGET (xkb->btn)); @@ -117,9 +120,13 @@ xkb_plugin_layout_image_exposed (GtkWidget *widget, if (xkb->display_type == DISPLAY_TYPE_IMAGE) { xkb_cairo_draw_flag (cr, group_name, +#ifdef HAS_PANEL_49 + xfce_panel_plugin_get_size (xkb->plugin) / xfce_panel_plugin_get_nrows (xkb->plugin) * 0.75, +#else xfce_panel_plugin_get_size (xkb->plugin), +#endif actual_hsize, actual_vsize, - xkb->hsize, xkb->vsize, + xkb->hsize, vsize, xkb_config_variant_index_for_group (-1), fgcolor ); @@ -127,9 +134,13 @@ xkb_plugin_layout_image_exposed (GtkWidget *widget, else { xkb_cairo_draw_label (cr, group_name, +#ifdef HAS_PANEL_49 + xfce_panel_plugin_get_size (xkb->plugin) / xfce_panel_plugin_get_nrows (xkb->plugin) * 0.75, +#else xfce_panel_plugin_get_size (xkb->plugin), +#endif actual_hsize, actual_vsize, - xkb->hsize, xkb->vsize, + xkb->hsize, vsize, xkb_config_variant_index_for_group (-1), xkb->display_textsize, fgcolor -- 1.7.5.4