2
* This file is a part of the Cairo-Dock project
4
* Copyright : (C) see the 'copyright' file.
5
* E-mail : see the 'copyright' file.
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 3
10
* of the License, or (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* 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/>.
22
#include "applet-struct.h"
23
#include "applet-config.h"
24
#include "applet-notifications.h"
25
#include "applet-reboot-required.h"
26
#include "applet-timer.h"
27
#include "applet-init.h"
29
CD_APPLET_DEFINE_BEGIN ("logout",
31
CAIRO_DOCK_CATEGORY_APPLET_DESKTOP,
32
N_("This applet lets you manage the current session. You can either:\n"
33
"shut down, restart, hibernate, suspend, log out, lock the screen, switch to another user, or program an automatic shutdown\n"
34
"It will also tell you if your system needs to be restarted.\n"
35
"<b>Click</b> on the icon to pop the menu up.\n"
36
"You can bind a <b>shortcut</b> to it, and also to lock the screen."),
37
"Fabounet (Fabrice Rey)")
38
CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
39
CD_APPLET_REDEFINE_TITLE (N_("Log out"))
46
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
49
CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE; // set the default icon if none is specified in conf.
51
if (g_iDesktopEnv == CAIRO_DOCK_GNOME) // on prend le controle de l'icone de la fenetre.
52
CD_APPLET_MANAGE_APPLICATION ("gnome-session"); // x-session-manager before 2.28
53
else if (g_iDesktopEnv == CAIRO_DOCK_XFCE)
54
CD_APPLET_MANAGE_APPLICATION ("xfce4-session-logout"); // x-session-manager before 4.8
55
else if (g_iDesktopEnv == CAIRO_DOCK_KDE)
56
CD_APPLET_MANAGE_APPLICATION ("ksmserver"); /// pas du tout sur...
58
myData.iDesiredIconSize = cairo_dock_search_icon_size (GTK_ICON_SIZE_MENU);
60
//\_______________ On enregistre nos notifications.
61
CD_APPLET_REGISTER_FOR_CLICK_EVENT;
62
CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
63
CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
67
myData.pKeyBinding = CD_APPLET_BIND_KEY (myConfig.cShortkey,
68
D_("Lock the screen"),
69
"Configuration", "shortkey",
70
(CDBindkeyHandler) cd_logout_on_keybinding_pull);
71
myData.pKeyBinding2 = CD_APPLET_BIND_KEY (myConfig.cShortkey2,
72
D_("Show the log-out menu"),
73
"Configuration", "shortkey2",
74
(CDBindkeyHandler) cd_logout_on_keybinding_pull2);
76
//\_______________ On (re)lance l'eteignage programme.
77
cd_logout_set_timer ();
79
//\_______________ We monitor files in order to know if a reboot/logout is needed
80
cairo_dock_fm_add_monitor_full (CD_REBOOT_NEEDED_FILE, FALSE, NULL, (CairoDockFMMonitorCallback) cd_logout_check_reboot_required, NULL);
81
// maybe not very clean to directly use 'CD_REBOOT_NEEDED' but it's just to not use two new variables for this tiny enum ;)
82
cd_logout_check_reboot_required_init ();
88
//\_______________ On se desabonne de nos notifications.
89
CD_APPLET_UNREGISTER_FOR_CLICK_EVENT;
90
CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT;
91
CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT;
93
gldi_object_unref (GLDI_OBJECT(myData.pKeyBinding));
94
gldi_object_unref (GLDI_OBJECT(myData.pKeyBinding2));
97
CD_APPLET_MANAGE_APPLICATION (cNull); // on relache le controle de l'icone de la fenetre.
99
gldi_task_discard (myData.pTask);
101
if (myData.iSidTimer != 0)
102
g_source_remove (myData.iSidTimer);
104
cairo_dock_fm_remove_monitor_full (CD_REBOOT_NEEDED_FILE, FALSE, NULL);
108
CD_APPLET_RELOAD_BEGIN
109
if (CD_APPLET_MY_CONFIG_CHANGED)
111
if (myDesklet && CD_APPLET_MY_CONTAINER_TYPE_CHANGED) // we are now in a desklet, set a renderer.
113
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
116
CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE; // set the default icon if none is specified in conf.
118
// the icon can be changed.
119
cd_logout_check_reboot_required_init ();
121
gldi_shortkey_rebind (myData.pKeyBinding, myConfig.cShortkey, NULL);
122
gldi_shortkey_rebind (myData.pKeyBinding2, myConfig.cShortkey2, NULL);