[Xfce4-commits] <xfce4-panel:master> Merge branch 'andrzejr/clock'
Andrzej
noreply at xfce.org
Fri Jan 25 22:40:06 CET 2013
Updating branch refs/heads/master
to 6ae92167e2d971e841eba9724c159c554849a822 (commit)
from 4a04a2f8cbf166147d632126408288fc58979c7b (commit)
commit 6ae92167e2d971e841eba9724c159c554849a822
Merge: 4a04a2f 3d96560
Author: Andrzej <ndrwrdck at gmail.com>
Date: Fri Jan 25 21:38:04 2013 +0000
Merge branch 'andrzejr/clock'
commit 3d96560710786462f56f0c0d6a888922794d5a6a
Author: Andrzej <ndrwrdck at gmail.com>
Date: Mon Jan 21 00:38:55 2013 +0000
Removed "show-frame" property.
commit 422239beb277a6e534e25bcf627470ce552a4918
Author: Andrzej <ndrwrdck at gmail.com>
Date: Mon Jan 21 00:27:47 2013 +0000
Removed frame object and all references to it.
A frame looks bad inside a button and adds unnecessary padding
(on top of what the button has added).
The "show-frame" property is left unchanged but is nonfunctional.
commit a672491a6d2d12264c7e2f823cdf271b7e3acf82
Author: Andrzej <ndrwrdck at gmail.com>
Date: Mon Jan 21 00:12:07 2013 +0000
Adding a possibility to close the calendar popup with "Esc"
Calendar popup can be closed with an Escape key, provided it
has a keyboard focus.
commit eb7f419731ce953836def8d36650c967cc223298
Author: Andrzej <ndrwrdck at gmail.com>
Date: Mon Jan 21 00:10:24 2013 +0000
Placing a clock widget (with frame) in a toggle button.
A toggle button is used to trigger opening/closing of a calendar popup.
This is consistent with what other plugins do (e.g. app menu etc.).
This seems to work well with all clock widgets (digital, analog, etc.).
Had to rewire all events to the button, otherwise button's event handlers
were blocking them.
plugins/clock/clock-dialog.glade | 15 -----
plugins/clock/clock.c | 120 ++++++++++++++++++--------------------
2 files changed, 57 insertions(+), 78 deletions(-)
diff --git a/plugins/clock/clock-dialog.glade b/plugins/clock/clock-dialog.glade
index 68e9639..ea9c5a4 100644
--- a/plugins/clock/clock-dialog.glade
+++ b/plugins/clock/clock-dialog.glade
@@ -101,21 +101,6 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="show-frame">
- <property name="label" translatable="yes">Show _frame</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- </packing>
- </child>
- <child>
<object class="GtkEntry" id="tooltip-format">
<property name="visible">True</property>
<property name="can_focus">True</property>
diff --git a/plugins/clock/clock.c b/plugins/clock/clock.c
index 85a9d76..1022910 100644
--- a/plugins/clock/clock.c
+++ b/plugins/clock/clock.c
@@ -28,6 +28,7 @@
#include <math.h>
#endif
+#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#include <exo/exo.h>
#include <libxfce4ui/libxfce4ui.h>
@@ -57,11 +58,14 @@ static void clock_plugin_set_property (GObject *o
const GValue *value,
GParamSpec *pspec);
static gboolean clock_plugin_leave_notify_event (GtkWidget *widget,
- GdkEventCrossing *event);
+ GdkEventCrossing *event,
+ ClockPlugin *plugin);
static gboolean clock_plugin_enter_notify_event (GtkWidget *widget,
- GdkEventCrossing *event);
+ GdkEventCrossing *event,
+ ClockPlugin *plugin);
static gboolean clock_plugin_button_press_event (GtkWidget *widget,
- GdkEventButton *event);
+ GdkEventButton *event,
+ ClockPlugin *plugin);
static void clock_plugin_construct (XfcePanelPlugin *panel_plugin);
static void clock_plugin_free_data (XfcePanelPlugin *panel_plugin);
static gboolean clock_plugin_size_changed (XfcePanelPlugin *panel_plugin,
@@ -73,7 +77,10 @@ static void clock_plugin_screen_position_changed (XfcePanelPlugin *p
XfceScreenPosition position);
static void clock_plugin_configure_plugin (XfcePanelPlugin *panel_plugin);
static void clock_plugin_set_mode (ClockPlugin *plugin);
-static void clock_plugin_reposition_calendar (ClockPlugin *plugin);
+static void clock_plugin_reposition_calendar (ClockPlugin *plugin);
+static gboolean clock_plugin_calendar_key_press_event (GtkWidget *calendar_window,
+ GdkEventKey *event,
+ ClockPlugin *plugin);
static void clock_plugin_popup_calendar (ClockPlugin *plugin);
static void clock_plugin_hide_calendar (ClockPlugin *plugin);
static gboolean clock_plugin_tooltip (gpointer user_data);
@@ -87,7 +94,6 @@ enum
{
PROP_0,
PROP_MODE,
- PROP_SHOW_FRAME,
PROP_TOOLTIP_FORMAT,
PROP_COMMAND,
PROP_ROTATE_VERTICALLY
@@ -118,12 +124,11 @@ struct _ClockPlugin
XfcePanelPlugin __parent__;
GtkWidget *clock;
- GtkWidget *frame;
+ GtkWidget *button;
GtkWidget *calendar_window;
GtkWidget *calendar;
- guint show_frame : 1;
gchar *command;
ClockPluginMode mode;
guint rotate_vertically : 1;
@@ -189,18 +194,12 @@ static void
clock_plugin_class_init (ClockPluginClass *klass)
{
GObjectClass *gobject_class;
- GtkWidgetClass *widget_class;
XfcePanelPluginClass *plugin_class;
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->set_property = clock_plugin_set_property;
gobject_class->get_property = clock_plugin_get_property;
- widget_class = GTK_WIDGET_CLASS (klass);
- widget_class->leave_notify_event = clock_plugin_leave_notify_event;
- widget_class->enter_notify_event = clock_plugin_enter_notify_event;
- widget_class->button_press_event = clock_plugin_button_press_event;
-
plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass);
plugin_class->construct = clock_plugin_construct;
plugin_class->free_data = clock_plugin_free_data;
@@ -219,13 +218,6 @@ clock_plugin_class_init (ClockPluginClass *klass)
EXO_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
- PROP_SHOW_FRAME,
- g_param_spec_boolean ("show-frame",
- NULL, NULL,
- TRUE,
- EXO_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class,
PROP_TOOLTIP_FORMAT,
g_param_spec_string ("tooltip-format",
NULL, NULL,
@@ -253,16 +245,25 @@ clock_plugin_init (ClockPlugin *plugin)
{
plugin->mode = CLOCK_PLUGIN_MODE_DEFAULT;
plugin->clock = NULL;
- plugin->show_frame = TRUE;
plugin->tooltip_format = g_strdup (DEFAULT_TOOLTIP_FORMAT);
plugin->tooltip_timeout = NULL;
plugin->command = NULL;
plugin->rotate_vertically = TRUE;
- plugin->frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (plugin), plugin->frame);
- gtk_frame_set_shadow_type (GTK_FRAME (plugin->frame), GTK_SHADOW_ETCHED_IN);
- gtk_widget_show (plugin->frame);
+ plugin->button = xfce_panel_create_toggle_button ();
+ /* xfce_panel_plugin_add_action_widget (XFCE_PANEL_PLUGIN (plugin), plugin->button); */
+ gtk_container_add (GTK_CONTAINER (plugin), plugin->button);
+ gtk_widget_set_name (plugin->button, "clock-button");
+ gtk_button_set_relief (GTK_BUTTON (plugin->button), GTK_RELIEF_NONE);
+ /* Have to handle all events in the button object rather than the plugin.
+ * Otherwise, default handlers will block the events. */
+ g_signal_connect (G_OBJECT (plugin->button), "button-press-event",
+ G_CALLBACK (clock_plugin_button_press_event), plugin);
+ g_signal_connect (G_OBJECT (plugin->button), "enter-notify-event",
+ G_CALLBACK (clock_plugin_enter_notify_event), plugin);
+ g_signal_connect (G_OBJECT (plugin->button), "leave-notify-event",
+ G_CALLBACK (clock_plugin_leave_notify_event), plugin);
+ gtk_widget_show (plugin->button);
}
@@ -281,10 +282,6 @@ clock_plugin_get_property (GObject *object,
g_value_set_uint (value, plugin->mode);
break;
- case PROP_SHOW_FRAME:
- g_value_set_boolean (value, plugin->show_frame);
- break;
-
case PROP_TOOLTIP_FORMAT:
g_value_set_string (value, plugin->tooltip_format);
break;
@@ -312,7 +309,6 @@ clock_plugin_set_property (GObject *object,
GParamSpec *pspec)
{
ClockPlugin *plugin = XFCE_CLOCK_PLUGIN (object);
- gboolean show_frame;
gboolean rotate_vertically;
switch (prop_id)
@@ -325,16 +321,6 @@ clock_plugin_set_property (GObject *object,
}
break;
- case PROP_SHOW_FRAME:
- show_frame = g_value_get_boolean (value);
- if (plugin->show_frame != show_frame)
- {
- plugin->show_frame = show_frame;
- gtk_frame_set_shadow_type (GTK_FRAME (plugin->frame),
- show_frame ? GTK_SHADOW_ETCHED_IN : GTK_SHADOW_NONE);
- }
- break;
-
case PROP_TOOLTIP_FORMAT:
g_free (plugin->tooltip_format);
plugin->tooltip_format = g_value_dup_string (value);
@@ -369,10 +355,9 @@ clock_plugin_set_property (GObject *object,
static gboolean
clock_plugin_leave_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
+ GdkEventCrossing *event,
+ ClockPlugin *plugin)
{
- ClockPlugin *plugin = XFCE_CLOCK_PLUGIN (widget);
-
/* stop a running tooltip timeout when we leave the widget */
if (plugin->tooltip_timeout != NULL)
{
@@ -387,9 +372,9 @@ clock_plugin_leave_notify_event (GtkWidget *widget,
static gboolean
clock_plugin_enter_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
+ GdkEventCrossing *event,
+ ClockPlugin *plugin)
{
- ClockPlugin *plugin = XFCE_CLOCK_PLUGIN (widget);
guint interval;
/* start the tooltip timeout if needed */
@@ -406,9 +391,9 @@ clock_plugin_enter_notify_event (GtkWidget *widget,
static gboolean
clock_plugin_button_press_event (GtkWidget *widget,
- GdkEventButton *event)
+ GdkEventButton *event,
+ ClockPlugin *plugin)
{
- ClockPlugin *plugin = XFCE_CLOCK_PLUGIN (widget);
GError *error = NULL;
if (event->button == 1)
@@ -442,7 +427,8 @@ clock_plugin_button_press_event (GtkWidget *widget,
}
}
- return (*GTK_WIDGET_CLASS (clock_plugin_parent_class)->button_press_event) (widget, event);
+ /* bypass GTK_TOGGLE_BUTTON's handler and go directly to the plugin's one */
+ return (*GTK_WIDGET_CLASS (clock_plugin_parent_class)->button_press_event) (GTK_WIDGET (plugin), event);
}
@@ -454,7 +440,6 @@ clock_plugin_construct (XfcePanelPlugin *panel_plugin)
const PanelProperty properties[] =
{
{ "mode", G_TYPE_UINT },
- { "show-frame", G_TYPE_BOOLEAN },
{ "tooltip-format", G_TYPE_STRING },
{ "command", G_TYPE_STRING },
{ "rotate-vertically", G_TYPE_BOOLEAN },
@@ -500,24 +485,17 @@ clock_plugin_size_changed (XfcePanelPlugin *panel_plugin,
ClockPlugin *plugin = XFCE_CLOCK_PLUGIN (panel_plugin);
gdouble ratio;
gint ratio_size;
- gint border = 0;
gint offset;
if (plugin->clock == NULL)
return TRUE;
- /* set the frame border */
- if (plugin->show_frame && size > 26)
- border = 1;
- gtk_container_set_border_width (GTK_CONTAINER (plugin->frame), border);
-
/* get the width:height ratio */
g_object_get (G_OBJECT (plugin->clock), "size-ratio", &ratio, NULL);
if (ratio > 0)
{
- offset = MAX (plugin->frame->style->xthickness, plugin->frame->style->ythickness) + border;
- offset *= 2;
- ratio_size = size - offset;
+ ratio_size = size;
+ offset = 0;
}
else
{
@@ -830,10 +808,6 @@ clock_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
exo_mutual_binding_new (G_OBJECT (plugin), "mode",
G_OBJECT (object), "active");
- object = gtk_builder_get_object (builder, "show-frame");
- exo_mutual_binding_new (G_OBJECT (plugin), "show-frame",
- G_OBJECT (object), "active");
-
object = gtk_builder_get_object (builder, "tooltip-format");
exo_mutual_binding_new (G_OBJECT (plugin), "tooltip-format",
G_OBJECT (object), "text");
@@ -924,7 +898,7 @@ clock_plugin_set_mode (ClockPlugin *plugin)
xfce_panel_plugin_get_property_base (XFCE_PANEL_PLUGIN (plugin)),
properties[plugin->mode], FALSE);
- gtk_container_add (GTK_CONTAINER (plugin->frame), plugin->clock);
+ gtk_container_add (GTK_CONTAINER (plugin->button), plugin->clock);
gtk_widget_show (plugin->clock);
}
@@ -962,6 +936,22 @@ clock_plugin_calendar_show_event (GtkWidget *calendar_window,
+static gboolean
+clock_plugin_calendar_key_press_event (GtkWidget *calendar_window,
+ GdkEventKey *event,
+ ClockPlugin *plugin)
+{
+ if (event->type == GDK_KEY_PRESS && event->keyval == GDK_KEY_Escape)
+ {
+ clock_plugin_hide_calendar (plugin);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+
static void
clock_plugin_popup_calendar (ClockPlugin *plugin)
{
@@ -991,10 +981,13 @@ clock_plugin_popup_calendar (ClockPlugin *plugin)
| GTK_CALENDAR_SHOW_WEEK_NUMBERS);
g_signal_connect (G_OBJECT (plugin->calendar_window), "show",
G_CALLBACK (clock_plugin_calendar_show_event), plugin);
+ g_signal_connect (G_OBJECT (plugin->calendar_window), "key-press-event",
+ G_CALLBACK (clock_plugin_calendar_key_press_event), plugin);
gtk_container_add (GTK_CONTAINER (calendar_frame), plugin->calendar);
gtk_widget_show (plugin->calendar);
}
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plugin->button), TRUE);
gtk_widget_show (GTK_WIDGET (plugin->calendar_window));
xfce_panel_plugin_block_autohide (XFCE_PANEL_PLUGIN (plugin), TRUE);
}
@@ -1008,6 +1001,7 @@ clock_plugin_hide_calendar (ClockPlugin *plugin)
gtk_widget_hide (GTK_WIDGET (plugin->calendar_window));
xfce_panel_plugin_block_autohide (XFCE_PANEL_PLUGIN (plugin), FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plugin->button), FALSE);
}
More information about the Xfce4-commits
mailing list