Bug 8941: Support new panel mode Deskbar

Bumped dependency to Xfce Panel 4.9, and replaced Orientation code
against Mode.

Properly support three modes Horizontal, Vertical, and Deskbar by
respecting the Panel HIG. Fixes also bug 8959, code sets 1px border
width for very small panels, 2px otherwise.

Use pixel fixed width (60px) instead of width_chars for labels, because
in vertical mode the size is incorrect.

Fix 9073, custom colors wasn't working for the progress bars, this has
been fixed while rearranging the code.
master
Mike Massonnet 2012-07-14 18:31:31 +02:00
parent 1d664b8316
commit 7434a7f1fb
2 changed files with 95 additions and 58 deletions

View File

@ -6,7 +6,7 @@ dnl Copyright 2003 Benedikt Meurer <benedikt.meurer@unix-ag.uni-siegen.de>
dnl Copyright 2010 Florian Rivoal <frivoal@xfce.org>
dnl
m4_define([netload_version],[1.1.0])
m4_define([netload_version],[1.2.0])
AC_INIT([xfce4-netload-plugin], [netload_version],
[goodies-dev@xfce.org])
@ -53,10 +53,10 @@ AC_CHECK_LIB(nsl, kstat_open, SOLLIBS="$SOLLIBS -linet_ntop", SOLLIBS="$SOLLIBS"
AC_SUBST(SOLLIBS)
dnl configure the panel plugin
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.7.0])
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.9.0])
dnl configure the libxfcegui4
XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.7.0])
XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.9.0])
dnl Check for i18n support
XDT_I18N([@LINGUAS@])

View File

@ -35,6 +35,7 @@
#define BORDER 8
#define LABEL_SIZE 60
/* Defaults */
#define DEFAULT_TEXT "Net"
@ -283,37 +284,99 @@ static void run_update (t_global_monitor *global)
/* ---------------------------------------------------------------------------------------------- */
static void monitor_set_orientation (XfcePanelPlugin *plugin, GtkOrientation orientation,
static gboolean monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_monitor *global)
{
gint i;
XfcePanelPluginMode mode = xfce_panel_plugin_get_mode (plugin);
PRINT_DBG("monitor_set_size");
if (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR)
{
for (i = 0; i < SUM; i++)
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]), BORDER, BORDER);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->rcv_label), -1, -1);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->sent_label), -1, -1);
gtk_widget_set_size_request(GTK_WIDGET(plugin), size, -1);
}
else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
{
for (i = 0; i < SUM; i++)
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]), -1, BORDER);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->rcv_label), -1, LABEL_SIZE);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->sent_label), -1, LABEL_SIZE);
gtk_widget_set_size_request(GTK_WIDGET(plugin), size, -1);
}
else /* mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL */
{
for (i = 0; i < SUM; i++)
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]), BORDER, -1);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->rcv_label), LABEL_SIZE, -1);
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->sent_label), LABEL_SIZE, -1);
gtk_widget_set_size_request(GTK_WIDGET(plugin), -1, size);
}
gtk_container_set_border_width(GTK_CONTAINER(global->box), size > 26 ? 2 : 1);
return TRUE;
}
/* ---------------------------------------------------------------------------------------------- */
static void monitor_set_mode (XfcePanelPlugin *plugin, XfcePanelPluginMode mode,
t_global_monitor *global)
{
gint i;
PRINT_DBG("monitor_set_mode");
if (global->timeout_id)
{
g_source_remove(global->timeout_id);
}
xfce_hvbox_set_orientation(XFCE_HVBOX(global->box), orientation);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
if (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR)
{
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.5f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.0f, 0.5f);
xfce_hvbox_set_orientation(XFCE_HVBOX(global->box), GTK_ORIENTATION_VERTICAL);
gtk_label_set_angle(GTK_LABEL(global->monitor->label), 0);
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 0.5f, 1.0f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.5f, 0.0f);
gtk_label_set_angle(GTK_LABEL(global->monitor->rcv_label), 0);
gtk_label_set_angle(GTK_LABEL(global->monitor->sent_label), 0);
for (i = 0; i < SUM; i++)
{
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]),
GTK_PROGRESS_BOTTOM_TO_TOP);
GTK_PROGRESS_LEFT_TO_RIGHT);
}
}
else
else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL)
{
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.0f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 1.0f, 1.0f);
xfce_hvbox_set_orientation(XFCE_HVBOX(global->box), GTK_ORIENTATION_VERTICAL);
gtk_label_set_angle(GTK_LABEL(global->monitor->label), 270);
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 0.5f, 1.0f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.5f, 0.0f);
gtk_label_set_angle(GTK_LABEL(global->monitor->rcv_label), 270);
gtk_label_set_angle(GTK_LABEL(global->monitor->sent_label), 270);
for (i = 0; i < SUM; i++)
{
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]),
GTK_PROGRESS_LEFT_TO_RIGHT);
}
}
else /* mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL */
{
xfce_hvbox_set_orientation(XFCE_HVBOX(global->box), GTK_ORIENTATION_HORIZONTAL);
gtk_label_set_angle(GTK_LABEL(global->monitor->label), 0);
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.5f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.0f, 0.5f);
gtk_label_set_angle(GTK_LABEL(global->monitor->rcv_label), 0);
gtk_label_set_angle(GTK_LABEL(global->monitor->sent_label), 0);
for (i = 0; i < SUM; i++)
{
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]),
GTK_PROGRESS_BOTTOM_TO_TOP);
}
}
monitor_set_size(plugin, xfce_panel_plugin_get_size(plugin), global);
run_update( global );
}
@ -405,30 +468,15 @@ static t_global_monitor * monitor_new(XfcePanelPlugin *plugin)
/* Create sent and received labels */
global->monitor->rcv_label = gtk_label_new("-");
gtk_label_set_width_chars(GTK_LABEL(global->monitor->rcv_label), 7);
global->monitor->sent_label = gtk_label_new("-");
gtk_label_set_width_chars(GTK_LABEL(global->monitor->sent_label), 7);
gtk_box_pack_start(GTK_BOX(global->box),
GTK_WIDGET(global->monitor->rcv_label),
TRUE, FALSE, BORDER / 2);
gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.5f);
gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.0f, 0.5f);
/* Create the progress bars */
for (i = 0; i < SUM; i++)
{
global->monitor->status[i] = GTK_WIDGET(gtk_progress_bar_new());
gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_PRELIGHT,
&global->monitor->options.color[i]);
gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_SELECTED,
&global->monitor->options.color[i]);
gtk_widget_modify_base(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_SELECTED,
&global->monitor->options.color[i]);
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]),
GTK_PROGRESS_BOTTOM_TO_TOP);
gtk_box_pack_start(GTK_BOX(global->box),
GTK_WIDGET(global->monitor->status[i]), FALSE, FALSE, 0);
}
@ -497,6 +545,17 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings)
else
global->monitor->net_max[i] = global->monitor->options.max[i];
gtk_widget_show(global->monitor->status[i]);
/* Set bar colors */
gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_PRELIGHT,
&global->monitor->options.color[i]);
gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_SELECTED,
&global->monitor->options.color[i]);
gtk_widget_modify_base(GTK_WIDGET(global->monitor->status[i]),
GTK_STATE_SELECTED,
&global->monitor->options.color[i]);
}
else
{
@ -522,6 +581,8 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings)
}
global->monitor->options.old_network_device = g_strdup(global->monitor->options.network_device);
monitor_set_mode(global->plugin, xfce_panel_plugin_get_mode(global->plugin), global);
run_update( global );
}
@ -646,30 +707,6 @@ static void monitor_write_config(XfcePanelPlugin *plugin, t_global_monitor *glob
}
/* ---------------------------------------------------------------------------------------------- */
static gboolean monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_monitor *global)
{
gint i;
for (i = 0; i < SUM; i++)
{
if (xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_HORIZONTAL)
{
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]),
BORDER, -1);
}
else
{
gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]),
-1, BORDER);
}
}
PRINT_DBG("monitor_set_size");
return TRUE;
}
/* ---------------------------------------------------------------------------------------------- */
static void monitor_apply_options(t_global_monitor *global)
{
@ -1220,7 +1257,7 @@ static void netload_construct (XfcePanelPlugin *plugin)
g_signal_connect (plugin, "size-changed", G_CALLBACK (monitor_set_size), global);
g_signal_connect (plugin, "orientation-changed", G_CALLBACK (monitor_set_orientation), global);
g_signal_connect (plugin, "mode-changed", G_CALLBACK (monitor_set_mode), global);
gtk_container_add(GTK_CONTAINER(plugin), global->ebox);