62
static inline void _execute_action (gint iAction)
74
cairo_dock_fm_lock_screen ();
60
79
CD_APPLET_ON_CLICK_BEGIN
81
/**if (myIcon->Xid != 0)
64
83
if (cairo_dock_get_current_active_window () == myIcon->Xid && myTaskBar.bMinimizeOnClick)
65
84
cairo_dock_minimize_xwindow (myIcon->Xid);
67
86
cairo_dock_show_xwindow (myIcon->Xid);
71
if (myConfig.bInvertButtons)
90
// on execute l'action meme si la fenetre est deja ouverte (ca lui redonne le focus), car si on avait deja execute l'autre action, ca empeche de faire celle-ci.
91
_execute_action (myConfig.iActionOnClick);
77
94
CD_APPLET_ON_CLICK_END
80
97
CD_APPLET_ON_MIDDLE_CLICK_BEGIN
82
if (myConfig.bInvertButtons)
99
_execute_action (myConfig.iActionOnMiddleClick);
87
101
CD_APPLET_ON_MIDDLE_CLICK_END
90
static void _cd_logout_lock_screen (GtkMenuItem *menu_item, gpointer data)
104
static void _cd_logout (GtkMenuItem *menu_item, gpointer data)
110
static void _cd_shutdown (GtkMenuItem *menu_item, gpointer data)
116
static void _cd_lock_screen (GtkMenuItem *menu_item, gpointer data)
93
119
cairo_dock_fm_lock_screen ();
94
120
CD_APPLET_LEAVE ();
123
static void _cd_logout_guest_session (GtkMenuItem *menu_item, gpointer data)
126
gchar *cResult = cairo_dock_launch_command_sync ("which guest-session");
127
if (cResult != NULL && *cResult == '/')
128
cairo_dock_launch_command ("guest-session");
129
else if (g_file_test (GUEST_SESSION_LAUNCHER, G_FILE_TEST_EXISTS))
130
cairo_dock_launch_command (GUEST_SESSION_LAUNCHER);
97
135
static void _cd_logout_program_shutdown (GtkMenuItem *menu_item, gpointer data)
121
159
CD_APPLET_ON_BUILD_MENU_BEGIN
123
161
GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
124
if (g_iDesktopEnv == CAIRO_DOCK_GNOME)
125
CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Lock screen"), MY_APPLET_SHARE_DATA_DIR"/icon-lock.png", _cd_logout_lock_screen, CD_APPLET_MY_MENU);
164
if (myConfig.iActionOnClick != CD_LOGOUT) // logout action not on click => put it in the menu
166
if (myConfig.iActionOnMiddleClick == CD_LOGOUT) // logout action on middle-click
167
cLabel = g_strdup_printf ("%s (%s)", D_("Log out"), D_("middle-click"));
169
cLabel = g_strdup (D_("Log out"));
170
CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel, MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE, _cd_logout, CD_APPLET_MY_MENU);
173
if (myConfig.iActionOnClick != CD_SHUTDOWN) // shutdown action not on click => put it in the menu
175
if (myConfig.iActionOnMiddleClick == CD_SHUTDOWN) // logout action on middle-click
176
cLabel = g_strdup_printf ("%s (%s)", D_("Shut down"), D_("middle-click"));
178
cLabel = g_strdup (D_("Shut down"));
179
CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel, MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE, _cd_shutdown, CD_APPLET_MY_MENU);
182
if (myConfig.iActionOnClick != CD_LOCK_SCREEN) // lockscreen action not on click => put it in the menu
184
if (myConfig.iActionOnMiddleClick == CD_LOCK_SCREEN) // lockscreen action on middle-click
185
cLabel = g_strdup_printf ("%s (%s)", D_("Lock screen"), D_("middle-click"));
187
cLabel = g_strdup (D_("Lock screen"));
188
CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel, MY_APPLET_SHARE_DATA_DIR"/icon-lock.png", _cd_lock_screen, CD_APPLET_MY_MENU);
191
if (g_file_test (GUEST_SESSION_LAUNCHER, G_FILE_TEST_EXISTS)) // Guest Session
193
CD_APPLET_ADD_IN_MENU (D_("Guest session"), _cd_logout_guest_session, CD_APPLET_MY_MENU);
197
gchar *cResult = cairo_dock_launch_command_sync ("which guest-session");
198
if (cResult != NULL && *cResult == '/')
199
CD_APPLET_ADD_IN_MENU (D_("Guest session"), _cd_logout_guest_session, CD_APPLET_MY_MENU);
127
203
CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Program an automatic shut-down"), MY_APPLET_SHARE_DATA_DIR"/icon-scheduling.png", _cd_logout_program_shutdown, CD_APPLET_MY_MENU); // pas beaucoup d'entrees => on le met dans le menu global.
178
251
CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL);
255
static void _set_reboot_message (void)
257
gchar *cMessage = NULL;
259
g_file_get_contents (CD_REBOOT_NEEDED_FILE,
263
if (cMessage != NULL)
265
int len = strlen (cMessage);
266
if (cMessage[len-1] == '\n')
267
cMessage[len-1] = '\0';
268
CD_APPLET_SET_NAME_FOR_MY_ICON (cMessage);
271
CD_APPLET_SET_NAME_FOR_MY_ICON (myConfig.cDefaultLabel);
274
void cd_logout_check_reboot_required (CairoDockFMEventType iEventType, const gchar *cURI, gpointer data)
278
case CAIRO_DOCK_FILE_MODIFIED: // new message
279
_set_reboot_message ();
282
case CAIRO_DOCK_FILE_DELETED: // reboot no more required (shouldn't happen)
283
myData.bRebootNeeded = FALSE;
284
CD_APPLET_SET_NAME_FOR_MY_ICON (myConfig.cDefaultLabel);
285
CD_APPLET_STOP_DEMANDING_ATTENTION;
288
case CAIRO_DOCK_FILE_CREATED: // reboot required
289
myData.bRebootNeeded = TRUE;
290
_set_reboot_message ();
291
CD_APPLET_DEMANDS_ATTENTION ("pulse", 20);
292
cairo_dock_show_temporary_dialog_with_icon (myIcon->cName, myIcon, myContainer, 5e3, "same icon");
293
if (myConfig.cEmblemPath != NULL && *myConfig.cEmblemPath != '\0' && g_file_test (myConfig.cEmblemPath, G_FILE_TEST_EXISTS))
294
CD_APPLET_SET_EMBLEM_ON_MY_ICON (myConfig.cEmblemPath, CAIRO_DOCK_EMBLEM_UPPER_RIGHT);
296
CD_APPLET_SET_EMBLEM_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/emblem-reboot.png", CAIRO_DOCK_EMBLEM_UPPER_RIGHT);
303
void cd_logout_check_reboot_required_init (void)
305
if (g_file_test (CD_REBOOT_NEEDED_FILE, G_FILE_TEST_EXISTS))
307
cd_logout_check_reboot_required (CAIRO_DOCK_FILE_CREATED, CD_REBOOT_NEEDED_FILE, NULL);