[Xfce4-commits] <xfce4-panel:master> pager: fixed wnck pager aspect ratio in deskbar mode
Andrzej
noreply at xfce.org
Fri Dec 20 04:40:01 CET 2013
Updating branch refs/heads/master
to c42ab58051aaf30ade4496de05fc27e4540eb961 (commit)
from 862db2d44aed25e8a397f5314f9daab374c4e9fa (commit)
commit c42ab58051aaf30ade4496de05fc27e4540eb961
Author: Andrzej <ndrwrdck at gmail.com>
Date: Fri Dec 20 03:38:39 2013 +0000
pager: fixed wnck pager aspect ratio in deskbar mode
Previously we were relying on new api added in libwnck-2.31.
Unfortunately, stable version of libwnck was never released and the API
was not added to libwnck-3.
This commit changes the method of setting the aspect ratio.
Aspect ratio is now calculated in the plugin using screen dimensions.
One minor limitation of this method is that we are not accounting
for wnck pager frames, so the aspect ratio may be slightly inaccurate.
plugins/pager/pager.c | 64 ++++++++++++++++++++++++++++++++++---------------
1 file changed, 45 insertions(+), 19 deletions(-)
diff --git a/plugins/pager/pager.c b/plugins/pager/pager.c
index 6f0a378..7b716a2 100644
--- a/plugins/pager/pager.c
+++ b/plugins/pager/pager.c
@@ -53,6 +53,8 @@ static void pager_plugin_set_property (GObject *ob
guint prop_id,
const GValue *value,
GParamSpec *pspec);
+static void pager_plugin_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
static gboolean pager_plugin_scroll_event (GtkWidget *widget,
GdkEventScroll *event);
static void pager_plugin_screen_changed (GtkWidget *widget,
@@ -86,6 +88,7 @@ struct _PagerPlugin
guint scrolling : 1;
guint miniature_view : 1;
gint rows;
+ gfloat ratio;
};
enum
@@ -117,6 +120,7 @@ pager_plugin_class_init (PagerPluginClass *klass)
widget_class = GTK_WIDGET_CLASS (klass);
widget_class->scroll_event = pager_plugin_scroll_event;
+ widget_class->size_request = pager_plugin_size_request;
plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass);
plugin_class->construct = pager_plugin_construct;
@@ -156,6 +160,7 @@ pager_plugin_init (PagerPlugin *plugin)
plugin->scrolling = TRUE;
plugin->miniature_view = TRUE;
plugin->rows = 1;
+ plugin->ratio = 1.0;
plugin->pager = NULL;
}
@@ -303,15 +308,8 @@ pager_plugin_screen_layout_changed (PagerPlugin *plugin)
if (!wnck_pager_set_n_rows (WNCK_PAGER (plugin->pager), plugin->rows))
g_message ("Setting the pager rows returned false. Maybe the setting is not applied.");
-#ifdef WNCK_CHECK_VERSION
-#if WNCK_CHECK_VERSION (2,31,0)
- wnck_pager_set_layout_policy (WNCK_PAGER (plugin->pager),
- (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) ?
- WNCK_PAGER_LAYOUT_POLICY_WIDTH_FOR_HEIGHT :
- WNCK_PAGER_LAYOUT_POLICY_HEIGHT_FOR_WIDTH);
-#endif
-#endif
wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
+ plugin->ratio = (gfloat) gdk_screen_width () / (gfloat) gdk_screen_height ();
}
else
{
@@ -421,17 +419,7 @@ pager_plugin_mode_changed (XfcePanelPlugin *panel_plugin,
GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
if (plugin->miniature_view)
- {
-#ifdef WNCK_CHECK_VERSION
-#if WNCK_CHECK_VERSION (2,31,0)
- wnck_pager_set_layout_policy (WNCK_PAGER (plugin->pager),
- (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) ?
- WNCK_PAGER_LAYOUT_POLICY_WIDTH_FOR_HEIGHT :
- WNCK_PAGER_LAYOUT_POLICY_HEIGHT_FOR_WIDTH);
-#endif
-#endif
- wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
- }
+ wnck_pager_set_orientation (WNCK_PAGER (plugin->pager), orientation);
else
pager_buttons_set_orientation (XFCE_PAGER_BUTTONS (plugin->pager), orientation);
}
@@ -560,3 +548,41 @@ pager_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
gtk_widget_show (GTK_WIDGET (dialog));
}
+
+
+
+static void
+pager_plugin_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ PagerPlugin *plugin = XFCE_PAGER_PLUGIN (widget);
+ XfcePanelPluginMode mode;
+ gint n_workspaces, n_cols;
+
+ if (plugin->miniature_view)
+ {
+ mode = xfce_panel_plugin_get_mode (XFCE_PANEL_PLUGIN (plugin));
+ n_workspaces = wnck_screen_get_workspace_count (plugin->wnck_screen);
+ n_cols = MAX (1, (n_workspaces + plugin->rows - 1) / plugin->rows);
+ if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL)
+ {
+ requisition->height = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+ requisition->width = (gint) (requisition->height / plugin->rows * plugin->ratio * n_cols);
+ }
+ else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
+ {
+ requisition->width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+ requisition->height = (gint) (requisition->width / plugin->rows / plugin->ratio * n_cols);
+ }
+ else /* (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) */
+ {
+ requisition->width = xfce_panel_plugin_get_size (XFCE_PANEL_PLUGIN (plugin));
+ requisition->height = (gint) (requisition->width / n_cols / plugin->ratio * plugin->rows);
+ }
+ }
+ else
+ {
+ gtk_widget_size_request (plugin->pager, requisition);
+ }
+}
+
More information about the Xfce4-commits
mailing list