3
// Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Rob Caelers & Raymond Penners
4
// All rights reserved.
6
// This program is free software: you can redistribute it and/or modify
7
// it under the terms of the GNU General Public License as published by
8
// the Free Software Foundation, either version 3 of the License, or
9
// (at your option) any later version.
11
// This program is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
// GNU General Public License for more details.
16
// You should have received a copy of the GNU General Public License
17
// along with this program. If not, see <http://www.gnu.org/licenses/>.
26
#include <panel-applet.h>
31
#define DBUS_API_SUBJECT_TO_CHANGE
32
#include <dbus/dbus.h>
33
#include <dbus/dbus-glib-bindings.h>
34
#include <dbus/dbus-glib-lowlevel.h>
36
#include "WorkraveApplet.h"
37
#include "applet-server-bindings.h"
38
#include "gui-client-bindings.h"
42
G_DEFINE_TYPE (WorkraveApplet, workrave_applet, G_TYPE_OBJECT);
44
static WorkraveApplet *g_applet = NULL;
45
static DBusGConnection *g_connection = NULL;
47
static void workrave_applet_set_all_visible(gboolean visible);
48
static void workrave_applet_set_visible(gchar *name, gboolean visible);
51
void workrave_applet_destroy(GtkObject *object);
53
/************************************************************************/
55
/************************************************************************/
57
static WorkraveApplet*
60
return (WorkraveApplet *)g_object_new(WORKRAVE_APPLET_TYPE, NULL);
64
workrave_applet_class_init(WorkraveAppletClass *klass)
70
workrave_applet_init(WorkraveApplet *applet)
73
applet->socket = NULL;
75
applet->socket_id = 0;
76
applet->orientation = 0;
77
applet->last_showlog_state = FALSE;
78
applet->last_reading_mode_state = FALSE;
79
applet->last_mode = 0;
80
applet->applet = NULL;
82
applet->support = NULL;
89
workrave_dbus_server_init()
91
DBusGProxy *driver_proxy;
93
guint request_name_result;
95
g_return_if_fail(g_connection == NULL);
96
g_return_if_fail(g_applet != NULL);
98
g_connection = dbus_g_bus_get(DBUS_BUS_SESSION, &err);
99
if (g_connection == NULL)
101
g_warning("DBUS Service registration failed: %s", err ? err->message : "");
106
dbus_connection_set_exit_on_disconnect(dbus_g_connection_get_connection(g_connection),
109
driver_proxy = dbus_g_proxy_new_for_name(g_connection,
112
DBUS_INTERFACE_DBUS);
114
if (!org_freedesktop_DBus_request_name(driver_proxy,
117
&request_name_result,
120
g_warning("DBUS Service name request failed.");
124
if (request_name_result == DBUS_REQUEST_NAME_REPLY_EXISTS)
126
g_warning("DBUS Service already started elsewhere");
130
dbus_g_object_type_install_info(WORKRAVE_APPLET_TYPE,
131
&dbus_glib_workrave_object_info);
133
dbus_g_connection_register_g_object(g_connection,
134
"/org/workrave/Workrave/GnomeApplet",
137
g_applet->support = dbus_g_proxy_new_for_name(g_connection,
138
"org.workrave.Workrave.Activator",
139
"/org/workrave/Workrave/UI",
140
"org.workrave.GnomeAppletSupportInterface");
142
g_applet->ui = dbus_g_proxy_new_for_name(g_connection,
143
"org.workrave.Workrave.Activator",
144
"/org/workrave/Workrave/UI",
145
"org.workrave.ControlInterface");
147
g_applet->core = dbus_g_proxy_new_for_name(g_connection,
148
"org.workrave.Workrave.Activator",
149
"/org/workrave/Workrave/Core",
150
"org.workrave.CoreInterface");
155
workrave_dbus_server_cleanup()
157
DBusGProxy *driver_proxy;
159
guint release_name_result;
161
driver_proxy = dbus_g_proxy_new_for_name(g_connection,
164
DBUS_INTERFACE_DBUS);
166
if (!org_freedesktop_DBus_release_name(driver_proxy,
168
&release_name_result,
171
g_warning("DBUS Service name release failed.");
175
if (g_connection != NULL)
177
dbus_g_connection_unref(g_connection);
184
workrave_is_running(void)
186
DBusGProxy *dbus = NULL;
187
GError *error = NULL;
188
gboolean running = FALSE;
190
if (g_connection != NULL)
192
dbus = dbus_g_proxy_new_for_name(g_connection,
193
"org.freedesktop.DBus",
194
"/org/freedesktop/DBus",
195
"org.freedesktop.DBus");
200
dbus_g_proxy_call(dbus, "NameHasOwner", &error,
201
G_TYPE_STRING, "org.workrave.Workrave",
203
G_TYPE_BOOLEAN, &running,
212
workrave_applet_get_socket_id(WorkraveApplet *applet, guint *id, GError **err)
214
*id = applet->socket_id;
221
workrave_applet_get_size(WorkraveApplet *applet, guint *size, GError **err)
223
*size = applet->size;
230
workrave_applet_get_orientation(WorkraveApplet *applet, guint *orientation, GError **err)
232
*orientation = applet->orientation;
239
workrave_applet_set_menu_status(WorkraveApplet *applet, const char *name, gboolean status, GError **err)
241
if (g_str_has_prefix(name, "/commands/"))
243
name += 10; // Skip gnome2 prefix for compatibility
246
GtkAction *action = gtk_action_group_get_action(g_applet->action_group, name);
247
if (GTK_IS_TOGGLE_ACTION(action))
249
GtkToggleAction *toggle = GTK_TOGGLE_ACTION(action);
250
gtk_toggle_action_set_active(toggle, status);
260
workrave_applet_get_menu_status(WorkraveApplet *applet, const char *name, gboolean *status, GError **err)
262
if (g_str_has_prefix(name, "/commands/"))
264
name += 10; // Skip gnome2 prefix for compatibility
267
GtkAction *action = gtk_action_group_get_action(g_applet->action_group, name);
268
if (GTK_IS_TOGGLE_ACTION(action))
270
GtkToggleAction *toggle = GTK_TOGGLE_ACTION(action);
271
*status = gtk_toggle_action_get_active(toggle);
280
workrave_applet_set_menu_active(WorkraveApplet *applet, const char *name, gboolean status, GError **err)
282
GtkAction *action = gtk_action_group_get_action(g_applet->action_group, name);
283
gtk_action_set_visible(action, status);
290
workrave_applet_get_menu_active(WorkraveApplet *applet, const char *name, gboolean *active, GError **err)
292
GtkAction *action = gtk_action_group_get_action(g_applet->action_group, name);
293
*active = gtk_action_get_visible(action);
300
/************************************************************************/
302
/************************************************************************/
305
dbus_callback(DBusGProxy *proxy,
306
DBusGProxyCall *call,
309
GError *error = NULL;
311
dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_INVALID);
315
g_warning("DBUS Failed: %s", error ? error->message : "");
322
on_menu_about(GtkAction *action, WorkraveApplet *a)
324
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(WORKRAVE_PKGDATADIR "/images/workrave.png", NULL);
325
GtkAboutDialog *about = GTK_ABOUT_DIALOG(gtk_about_dialog_new());
327
gtk_container_set_border_width(GTK_CONTAINER(about), 5);
329
gtk_show_about_dialog(NULL,
332
"version", PACKAGE_VERSION "\n(" GIT_VERSION ")",
334
"version", PACKAGE_VERSION,
336
"copyright", workrave_copyright,
337
"website", "http://www.workrave.org",
338
"website_label", "www.workrave.org",
339
"comments", _("This program assists in the prevention and recovery"
340
" of Repetitive Strain Injury (RSI)."),
341
"translator-credits", workrave_translators,
342
"authors", workrave_authors,
345
g_object_unref(pixbuf);
350
on_menu_open(GtkAction *action, WorkraveApplet *a)
352
if (g_applet->ui != NULL)
354
dbus_g_proxy_begin_call(g_applet->ui, "OpenMain", dbus_callback, NULL, NULL,
361
on_menu_preferences(GtkAction *action, WorkraveApplet *a)
363
if (!workrave_is_running())
368
if (g_applet->ui != NULL)
370
dbus_g_proxy_begin_call(g_applet->ui, "Preferences", dbus_callback, NULL, NULL,
377
on_menu_exercises(GtkAction *action, WorkraveApplet *a)
379
if (!workrave_is_running())
384
if (g_applet->ui != NULL)
386
dbus_g_proxy_begin_call(g_applet->ui, "Exercises", dbus_callback, NULL, NULL,
392
on_menu_statistics(GtkAction *action, WorkraveApplet *a)
394
if (!workrave_is_running())
399
if (g_applet->ui != NULL)
401
dbus_g_proxy_begin_call(g_applet->ui, "Statistics", dbus_callback, NULL, NULL,
407
on_menu_restbreak(GtkAction *action, WorkraveApplet *a)
409
if (!workrave_is_running())
414
if (g_applet->ui != NULL)
416
dbus_g_proxy_begin_call(g_applet->ui, "RestBreak", dbus_callback, NULL, NULL,
424
on_menu_connect(GtkAction *action, WorkraveApplet *a)
426
if (!workrave_is_running())
431
if (g_applet->ui != NULL)
433
dbus_g_proxy_begin_call(g_applet->ui, "NetworkConnect", dbus_callback, NULL, NULL,
441
on_menu_disconnect(GtkAction *action, WorkraveApplet *a)
443
if (!workrave_is_running())
448
if (g_applet->ui != NULL)
450
dbus_g_proxy_begin_call(g_applet->ui, "NetworkDisconnect", dbus_callback, NULL, NULL,
456
on_menu_reconnect(GtkAction *action, WorkraveApplet *a)
458
if (!workrave_is_running())
463
if (g_applet->ui != NULL)
465
dbus_g_proxy_begin_call(g_applet->ui, "NetworkReconnect", dbus_callback, NULL, NULL,
473
on_menu_quit(GtkAction *action, WorkraveApplet *a)
475
if (!workrave_is_running())
480
if (g_applet->ui != NULL)
482
dbus_g_proxy_begin_call(g_applet->ui, "Quit", dbus_callback, NULL, NULL,
488
change_orient(PanelApplet *applet, PanelAppletOrient o, gpointer data)
492
case PANEL_APPLET_ORIENT_UP:
493
g_applet->orientation = 0;
495
case PANEL_APPLET_ORIENT_RIGHT:
496
g_applet->orientation = 1;
498
case PANEL_APPLET_ORIENT_DOWN:
499
g_applet->orientation = 2;
501
case PANEL_APPLET_ORIENT_LEFT:
502
g_applet->orientation = 3;
506
if (g_applet->support != NULL && workrave_is_running())
508
dbus_g_proxy_begin_call(g_applet->support, "SetOrientation", dbus_callback, NULL, NULL,
509
G_TYPE_UINT, g_applet->orientation, G_TYPE_INVALID);
516
change_background(PanelApplet * widget,
517
PanelAppletBackgroundType type,
522
static GdkPixmap *keep = NULL;
524
GValueArray *val = g_value_array_new(4);
526
if (type == PANEL_NO_BACKGROUND)
528
GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(widget));
530
if (style->bg_pixmap[GTK_STATE_NORMAL])
532
pixmap = style->bg_pixmap[GTK_STATE_NORMAL];
533
type = PANEL_PIXMAP_BACKGROUND;
537
color = &style->bg[GTK_STATE_NORMAL];
540
type = PANEL_COLOR_BACKGROUND;
545
if (type == PANEL_COLOR_BACKGROUND && color != NULL)
547
g_value_array_append(val, NULL);
548
g_value_init(g_value_array_get_nth(val, 0), G_TYPE_UINT);
549
g_value_set_uint(g_value_array_get_nth(val, 0), color->pixel);
551
g_value_array_append(val, NULL);
552
g_value_init(g_value_array_get_nth(val, 1), G_TYPE_UINT);
553
g_value_set_uint(g_value_array_get_nth(val, 1), color->red);
555
g_value_array_append(val, NULL);
556
g_value_init(g_value_array_get_nth(val, 2), G_TYPE_UINT);
557
g_value_set_uint(g_value_array_get_nth(val, 2), color->green);
559
g_value_array_append(val, NULL);
560
g_value_init(g_value_array_get_nth(val, 3), G_TYPE_UINT);
561
g_value_set_uint(g_value_array_get_nth(val, 3), color->blue);
566
for (i = 0; i < 4; i++)
568
g_value_array_prepend(val, NULL);
569
g_value_init(g_value_array_get_nth(val, 0), G_TYPE_UINT);
570
g_value_set_uint(g_value_array_get_nth(val, 0), 0);
574
if (type == PANEL_PIXMAP_BACKGROUND)
578
gdk_pixmap_unref(keep);
583
gdk_pixmap_ref(pixmap);
586
xid = GDK_PIXMAP_XID(pixmap);
589
if (g_applet->support != NULL && workrave_is_running())
591
dbus_g_proxy_begin_call(g_applet->support, "SetBackground", dbus_callback, NULL, NULL,
593
G_TYPE_VALUE_ARRAY, val,
600
g_value_array_free(val);
605
plug_removed(GtkSocket *socket, void *manager)
607
gtk_widget_show(GTK_WIDGET(g_applet->image));
608
gtk_widget_hide(GTK_WIDGET(g_applet->socket));
609
workrave_applet_set_all_visible(FALSE);
615
plug_added(GtkSocket *socket, void *manager)
617
gtk_widget_hide(GTK_WIDGET(g_applet->image));
618
gtk_widget_show(GTK_WIDGET(g_applet->socket));
619
workrave_applet_set_all_visible(TRUE);
625
button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data)
627
gboolean ret = FALSE;
629
if (event->button == 1)
631
if (g_applet->support != NULL && workrave_is_running())
633
dbus_g_proxy_begin_call(g_applet->support, "ButtonClicked", dbus_callback, NULL, NULL,
634
G_TYPE_UINT, event->button, G_TYPE_INVALID);
644
showlog_callback(GtkAction *action, WorkraveApplet *a)
646
gboolean new_state = FALSE;
648
if (GTK_IS_TOGGLE_ACTION(action))
650
GtkToggleAction *toggle = GTK_TOGGLE_ACTION(action);
651
new_state = gtk_toggle_action_get_active(toggle);
654
g_applet->last_showlog_state = new_state;
656
if (g_applet->ui != NULL && workrave_is_running())
658
dbus_g_proxy_begin_call(g_applet->ui, "NetworkLog", dbus_callback, NULL, NULL,
659
G_TYPE_BOOLEAN, new_state, G_TYPE_INVALID);
664
reading_mode_callback(GtkAction *action, WorkraveApplet *a)
666
gboolean new_state = FALSE;
668
if (GTK_IS_TOGGLE_ACTION(action))
670
GtkToggleAction *toggle = GTK_TOGGLE_ACTION(action);
671
new_state = gtk_toggle_action_get_active(toggle);
674
g_applet->last_reading_mode_state = new_state;
676
if (g_applet->ui != NULL && workrave_is_running())
678
dbus_g_proxy_begin_call(g_applet->ui, "ReadingMode", dbus_callback, NULL, NULL,
679
G_TYPE_BOOLEAN, new_state, G_TYPE_INVALID);
684
mode_callback(GtkAction *action, WorkraveApplet *a)
686
const char *modes[] = { "normal", "suspended", "quiet" };
689
if (GTK_IS_RADIO_ACTION(action))
691
GtkRadioAction *toggle = GTK_RADIO_ACTION(action);
692
mode = gtk_radio_action_get_current_value(toggle);
695
if (mode >= 0 && mode < G_N_ELEMENTS(modes))
697
g_applet->last_mode = mode;
699
if (g_applet->ui != NULL && workrave_is_running())
701
dbus_g_proxy_begin_call(g_applet->core, "SetOperationMode", dbus_callback, NULL, NULL,
702
G_TYPE_STRING, modes[mode], G_TYPE_INVALID);
709
workrave_applet_set_visible(gchar *name, gboolean visible)
713
action = gtk_action_group_get_action(g_applet->action_group, name);
714
gtk_action_set_visible(action, visible);
719
workrave_applet_set_all_visible(gboolean visible)
721
workrave_applet_set_visible("Preferences", visible);
722
workrave_applet_set_visible("Restbreak", visible);
723
workrave_applet_set_visible("Network", visible);
724
workrave_applet_set_visible("Normal", visible);
725
workrave_applet_set_visible("Suspended", visible);
726
workrave_applet_set_visible("Quiet", visible);
727
workrave_applet_set_visible("Mode", visible);
728
workrave_applet_set_visible("Statistics", visible);
729
workrave_applet_set_visible("Exercises", visible);
730
workrave_applet_set_visible("ReadingMode", visible);
731
workrave_applet_set_visible("Quit", visible);
735
/* stolen from clock applet :) */
737
force_no_focus_padding(GtkWidget *widget)
739
static gboolean first = TRUE;
743
gtk_rc_parse_string ("\n"
744
" style \"hdate-applet-button-style\"\n"
746
" GtkWidget::focus-line-width=0\n"
747
" GtkWidget::focus-padding=0\n"
750
" widget \"*.hdate-applet-button\" style \"hdate-applet-button-style\"\n"
755
gtk_widget_set_name(widget, "hdate-applet-button");
758
void size_allocate(GtkWidget *widget,
759
GtkAllocation *allocation,
762
static int prev_width = -1;
763
static int prev_height = -1;
765
if (prev_height == -1 || prev_width == -1 ||
766
allocation->width != prev_width ||
767
allocation->height != prev_height)
769
prev_height = allocation->height;
770
prev_width = allocation->width;
772
if (g_applet->orientation == 1 ||
773
g_applet->orientation == 3)
775
g_applet->size = allocation->width;
779
g_applet->size = allocation->height;
782
if (g_applet->support != NULL && workrave_is_running())
784
dbus_g_proxy_begin_call(g_applet->support, "SetSize", dbus_callback, NULL, NULL,
785
G_TYPE_UINT, g_applet->size,
794
void workrave_applet_destroy(GtkObject *object)
796
workrave_dbus_server_cleanup();
801
workrave_applet_realize(GtkWidget *widget, void *data)
807
workrave_applet_unrealize(GtkWidget *widget, void *data)
809
if (g_applet != NULL)
811
g_object_unref(g_applet);
815
workrave_dbus_server_cleanup();
818
static const GtkActionEntry menu_actions [] = {
819
{ "Open", GTK_STOCK_OPEN, N_("_Open"),
821
G_CALLBACK(on_menu_open) },
823
{ "Statistics", NULL, N_("_Statistics"),
825
G_CALLBACK(on_menu_statistics) },
827
{ "Preferences", GTK_STOCK_PREFERENCES, N_("_Preferences"),
829
G_CALLBACK(on_menu_preferences) },
831
{ "Exercises", NULL, N_("_Exercises"),
833
G_CALLBACK(on_menu_exercises) },
835
{ "Restbreak", NULL, N_("_Restbreak"),
837
G_CALLBACK(on_menu_restbreak) },
839
{ "Mode", NULL, N_("_Mode"),
843
{ "Network", NULL, N_("_Network"),
847
{ "Join", NULL, N_("_Join"),
849
G_CALLBACK(on_menu_connect) },
851
{ "Disconnect", NULL, N_("_Disconnect"),
853
G_CALLBACK(on_menu_disconnect) },
855
{ "Reconnect", NULL, N_("_Reconnect"),
857
G_CALLBACK(on_menu_reconnect) },
859
{ "About", GTK_STOCK_ABOUT, N_("_About"),
861
G_CALLBACK(on_menu_about) },
863
{ "Quit", GTK_STOCK_QUIT, N_("_Quit"),
865
G_CALLBACK(on_menu_quit) },
869
static const GtkToggleActionEntry toggle_actions[] = {
870
{ "ShowLog", NULL, N_("Show log"),
872
G_CALLBACK(showlog_callback), FALSE },
874
{ "ReadingMode", NULL, N_("Reading mode"),
876
G_CALLBACK(reading_mode_callback), FALSE },
879
static const GtkRadioActionEntry mode_actions[] = {
880
{ "Normal", NULL, N_("Normal"),
884
{ "Suspended", NULL, N_("Suspended"),
888
{ "Quiet", NULL, N_("Quiet"),
895
workrave_applet_fill(PanelApplet *applet)
897
GdkPixbuf *pixbuf = NULL;
898
GtkWidget *hbox = NULL;
899
PanelAppletOrient orient;
901
g_applet->action_group = gtk_action_group_new("WorkraveAppletActions");
902
gtk_action_group_set_translation_domain(g_applet->action_group, GETTEXT_PACKAGE);
903
gtk_action_group_add_actions(g_applet->action_group,
905
G_N_ELEMENTS (menu_actions),
907
gtk_action_group_add_toggle_actions(g_applet->action_group,
909
G_N_ELEMENTS (toggle_actions),
911
gtk_action_group_add_radio_actions (g_applet->action_group,
913
G_N_ELEMENTS(mode_actions),
915
G_CALLBACK(mode_callback),
918
gchar *ui_path = g_build_filename(WORKRAVE_UIDATADIR, "workrave-applet-menu.xml", NULL);
919
panel_applet_setup_menu_from_file(applet, ui_path, g_applet->action_group);
921
//g_object_unref(action_group);
923
panel_applet_set_flags(PANEL_APPLET(applet),
924
PANEL_APPLET_EXPAND_MINOR);
926
gtk_container_set_border_width(GTK_CONTAINER(applet), 0);
927
panel_applet_set_background_widget(applet, GTK_WIDGET(applet));
928
gtk_widget_set_events(GTK_WIDGET(applet),
929
gtk_widget_get_events(GTK_WIDGET(applet)) | GDK_BUTTON_PRESS_MASK);
932
g_signal_connect(G_OBJECT(applet), "button_press_event", G_CALLBACK(button_pressed),
936
g_applet->socket = gtk_socket_new();
937
gtk_container_set_border_width(GTK_CONTAINER(g_applet->socket), 0);
940
pixbuf = gdk_pixbuf_new_from_file(WORKRAVE_PKGDATADIR "/images/workrave-icon-medium.png", NULL);
941
g_applet->image = gtk_image_new_from_pixbuf(pixbuf);
944
g_signal_connect(g_applet->socket, "plug_removed", G_CALLBACK(plug_removed), NULL);
945
g_signal_connect(g_applet->socket, "plug_added", G_CALLBACK(plug_added), NULL);
946
g_signal_connect(G_OBJECT(applet), "change_orient", G_CALLBACK(change_orient), NULL);
949
hbox = gtk_vbox_new(FALSE, 0);
950
gtk_container_add(GTK_CONTAINER(applet), hbox);
951
gtk_box_pack_end(GTK_BOX(hbox), g_applet->socket, TRUE, TRUE, 0);
952
gtk_box_pack_end(GTK_BOX(hbox), g_applet->image, TRUE, TRUE, 0);
954
gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
956
g_applet->socket_id = gtk_socket_get_id(GTK_SOCKET(g_applet->socket));
957
g_applet->size = panel_applet_get_size(applet);
959
orient = panel_applet_get_orient(applet);
963
case PANEL_APPLET_ORIENT_UP:
964
g_applet->orientation = 0;
966
case PANEL_APPLET_ORIENT_RIGHT:
967
g_applet->orientation = 1;
969
case PANEL_APPLET_ORIENT_DOWN:
970
g_applet->orientation = 2;
972
case PANEL_APPLET_ORIENT_LEFT:
973
g_applet->orientation = 3;
977
force_no_focus_padding(GTK_WIDGET(applet));
978
force_no_focus_padding(GTK_WIDGET(g_applet->socket));
979
force_no_focus_padding(GTK_WIDGET(g_applet->image));
980
force_no_focus_padding(GTK_WIDGET(hbox));
982
g_signal_connect(G_OBJECT(applet), "destroy", G_CALLBACK(workrave_applet_destroy), NULL);
983
g_signal_connect(G_OBJECT(hbox), "realize", G_CALLBACK(workrave_applet_realize), NULL);
984
g_signal_connect(G_OBJECT(hbox), "unrealize", G_CALLBACK(workrave_applet_unrealize), NULL);
986
gtk_widget_show(GTK_WIDGET(g_applet->image));
987
gtk_widget_show(GTK_WIDGET(g_applet->socket));
988
gtk_widget_show(GTK_WIDGET(hbox));
989
gtk_widget_show(GTK_WIDGET(applet));
991
g_signal_connect(G_OBJECT(applet), "size-allocate", G_CALLBACK(size_allocate), NULL);
992
g_signal_connect(G_OBJECT(applet), "change_background", G_CALLBACK(change_background), NULL);
999
workrave_applet_factory(PanelApplet *applet, const gchar *iid, gpointer data)
1001
gboolean retval = FALSE;
1003
if (!g_ascii_strcasecmp(iid, "WorkraveApplet"))
1005
g_applet = workrave_applet_new();
1006
g_applet->applet = applet;
1008
workrave_dbus_server_init();
1009
retval = workrave_applet_fill(applet);
1011
if (g_applet->support != NULL)
1013
dbus_g_proxy_begin_call(g_applet->support, "EmbedRequest", dbus_callback, NULL, NULL,
1021
PANEL_APPLET_OUT_PROCESS_FACTORY("WorkraveAppletFactory",
1024
workrave_applet_factory,