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 "cairo-dock-modules.h"
23
#include "cairo-dock-X-utilities.h"
24
#include "cairo-dock-log.h"
25
#include "cairo-dock-load.h"
26
#include "cairo-dock-draw.h"
27
#include "cairo-dock-container.h"
28
#include "cairo-dock-dock-factory.h"
29
#include "cairo-dock-dock-facility.h"
30
#include "cairo-dock-applications-manager.h"
31
#include "cairo-dock-dock-manager.h"
32
#include "cairo-dock-internal-accessibility.h"
33
#include "cairo-dock-internal-indicators.h"
34
#include "cairo-dock-internal-icons.h"
35
#define _INTERNAL_MODULE_
36
#include "cairo-dock-internal-taskbar.h"
38
CairoConfigTaskBar myTaskBar;
39
extern CairoDock *g_pMainDock;
41
static gboolean get_config (GKeyFile *pKeyFile, CairoConfigTaskBar *pTaskBar)
43
gboolean bFlushConfFileNeeded = FALSE;
46
pTaskBar->bShowAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "show applications", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
48
pTaskBar->bAppliOnCurrentDesktopOnly = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "current desktop only", &bFlushConfFileNeeded, FALSE, "Applications", NULL);
50
pTaskBar->bMixLauncherAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "mix launcher appli", &bFlushConfFileNeeded, TRUE, NULL, NULL);
52
pTaskBar->bGroupAppliByClass = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "group by class", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
53
pTaskBar->cGroupException = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "group exception", &bFlushConfFileNeeded, "pidgin;xchat", NULL, NULL);
54
if (pTaskBar->cGroupException)
57
for (i = 0; pTaskBar->cGroupException[i] != '\0'; i ++) // on passe tout en minuscule.
58
pTaskBar->cGroupException[i] = g_ascii_tolower (pTaskBar->cGroupException[i]);
61
pTaskBar->bHideVisibleApplis = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "hide visible", &bFlushConfFileNeeded, FALSE, "Applications", NULL);
65
pTaskBar->bDrawIndicatorOnAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "indic on appli", &bFlushConfFileNeeded, FALSE, NULL, NULL);
67
pTaskBar->bOverWriteXIcons = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "overwrite xicon", &bFlushConfFileNeeded, TRUE, NULL, NULL);
68
pTaskBar->cOverwriteException = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "overwrite exception", &bFlushConfFileNeeded, "pidgin;xchat", NULL, NULL);
69
if (pTaskBar->cOverwriteException)
72
for (i = 0; pTaskBar->cOverwriteException[i] != '\0'; i ++)
73
pTaskBar->cOverwriteException[i] = g_ascii_tolower (pTaskBar->cOverwriteException[i]);
76
///pTaskBar->bShowThumbnail = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "window thumbnail", &bFlushConfFileNeeded, TRUE, NULL, NULL);
77
pTaskBar->iMinimizedWindowRenderType = cairo_dock_get_integer_key_value (pKeyFile, "TaskBar", "minimized", &bFlushConfFileNeeded, -1, NULL, NULL);
78
if (pTaskBar->iMinimizedWindowRenderType == -1) // anciens parametres.
80
gboolean bShowThumbnail = g_key_file_get_boolean (pKeyFile, "TaskBar", "window thumbnail", NULL);
82
pTaskBar->iMinimizedWindowRenderType = 1;
84
pTaskBar->iMinimizedWindowRenderType = 0;
85
g_key_file_set_integer (pKeyFile, "TaskBar", "minimized", pTaskBar->iMinimizedWindowRenderType);
88
if (pTaskBar->iMinimizedWindowRenderType == 1 && ! cairo_dock_xcomposite_is_available ())
90
cd_warning ("Sorry but either your X server does not have the XComposite extension, or your version of Cairo-Dock was not built with the support of XComposite.\n You can't have window thumbnails in the dock");
91
pTaskBar->iMinimizedWindowRenderType = 0;
93
if (pTaskBar->iMinimizedWindowRenderType == 0)
94
pTaskBar->fVisibleAppliAlpha = MIN (.6, cairo_dock_get_double_key_value (pKeyFile, "TaskBar", "visibility alpha", &bFlushConfFileNeeded, .35, "Applications", NULL));
96
pTaskBar->iAppliMaxNameLength = cairo_dock_get_integer_key_value (pKeyFile, "TaskBar", "max name length", &bFlushConfFileNeeded, 15, "Applications", NULL);
100
pTaskBar->bMinimizeOnClick = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "minimize on click", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
101
pTaskBar->bCloseAppliOnMiddleClick = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "close on middle click", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
103
pTaskBar->bDemandsAttentionWithDialog = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "demands attention with dialog", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
104
pTaskBar->iDialogDuration = cairo_dock_get_integer_key_value (pKeyFile, "TaskBar", "duration", &bFlushConfFileNeeded, 2, NULL, NULL);
105
pTaskBar->cAnimationOnDemandsAttention = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "animation on demands attention", &bFlushConfFileNeeded, "fire", NULL, NULL);
106
gchar *cForceDemandsAttention = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "force demands attention", &bFlushConfFileNeeded, "pidgin;xchat", NULL, NULL);
107
if (cForceDemandsAttention != NULL)
109
pTaskBar->cForceDemandsAttention = g_ascii_strdown (cForceDemandsAttention, -1);
110
g_free (cForceDemandsAttention);
113
pTaskBar->cAnimationOnActiveWindow = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "animation on active window", &bFlushConfFileNeeded, "wobbly", NULL, NULL);
115
return bFlushConfFileNeeded;
119
static void reset_config (CairoConfigTaskBar *pTaskBar)
121
g_free (pTaskBar->cAnimationOnActiveWindow);
122
g_free (pTaskBar->cAnimationOnDemandsAttention);
123
g_free (pTaskBar->cOverwriteException);
124
g_free (pTaskBar->cGroupException);
125
g_free (pTaskBar->cForceDemandsAttention);
128
static void _set_indicator (Icon *pIcon, CairoContainer *pContainer, gpointer data)
130
pIcon->bHasIndicator = GPOINTER_TO_INT (data);
132
static void reload (CairoConfigTaskBar *pPrevTaskBar, CairoConfigTaskBar *pTaskBar)
134
CairoDock *pDock = g_pMainDock;
136
gboolean bUpdateSize = FALSE;
137
g_print ("TASKBAR: %d;%d\n", cairo_dock_application_manager_is_running () , pTaskBar->bShowAppli);
138
if (/**pPrevTaskBar->bUniquePid != pTaskBar->bUniquePid ||*/
139
pPrevTaskBar->bGroupAppliByClass != pTaskBar->bGroupAppliByClass ||
140
pPrevTaskBar->bHideVisibleApplis != pTaskBar->bHideVisibleApplis ||
141
pPrevTaskBar->bAppliOnCurrentDesktopOnly != pTaskBar->bAppliOnCurrentDesktopOnly ||
142
pPrevTaskBar->bMixLauncherAppli != pTaskBar->bMixLauncherAppli ||
143
pPrevTaskBar->bOverWriteXIcons != pTaskBar->bOverWriteXIcons ||
144
pPrevTaskBar->iMinimizedWindowRenderType != pTaskBar->iMinimizedWindowRenderType ||
145
pPrevTaskBar->iAppliMaxNameLength != pTaskBar->iAppliMaxNameLength ||
146
cairo_dock_strings_differ (pPrevTaskBar->cGroupException, pTaskBar->cGroupException) ||
147
cairo_dock_strings_differ (pPrevTaskBar->cOverwriteException, pTaskBar->cOverwriteException) ||
148
(cairo_dock_application_manager_is_running () && ! pTaskBar->bShowAppli)) // on ne veut plus voir les applis, il faut donc les enlever.
150
cairo_dock_stop_application_manager ();
154
if (cairo_dock_application_manager_is_running () &&
155
pPrevTaskBar->bDrawIndicatorOnAppli != pTaskBar->bDrawIndicatorOnAppli)
157
cairo_dock_foreach_applis ((CairoDockForeachIconFunc) _set_indicator, FALSE, GINT_TO_POINTER (pTaskBar->bDrawIndicatorOnAppli));
158
gtk_widget_queue_draw (pDock->container.pWidget);
161
if (! cairo_dock_application_manager_is_running () && pTaskBar->bShowAppli) // maintenant on veut voir les applis !
163
cairo_dock_start_application_manager (pDock); // va inserer le separateur si necessaire.
167
gtk_widget_queue_draw (pDock->container.pWidget); // pour le fVisibleAlpha
169
if (pPrevTaskBar->bShowAppli != pTaskBar->bShowAppli ||
170
pPrevTaskBar->bGroupAppliByClass != pTaskBar->bGroupAppliByClass)
172
double fMaxScale = cairo_dock_get_max_scale (pDock);
173
cairo_dock_load_class_indicator (pTaskBar->bShowAppli && pTaskBar->bGroupAppliByClass ? myIndicators.cClassIndicatorImagePath : NULL, fMaxScale);
178
cairo_dock_calculate_dock_icons (pDock);
179
gtk_widget_queue_draw (pDock->container.pWidget); // le 'gdk_window_move_resize' ci-dessous ne provoquera pas le redessin si la taille n'a pas change.
181
cairo_dock_place_root_dock (pDock);
186
DEFINE_PRE_INIT (TaskBar)
188
pModule->cModuleName = "TaskBar";
189
pModule->cTitle = N_("TaskBar");
190
pModule->cIcon = "icon-taskbar.png";
191
pModule->cDescription = N_("Display and interact with the currently open windows.");
192
pModule->iCategory = CAIRO_DOCK_CATEGORY_SYSTEM;
193
pModule->iSizeOfConfig = sizeof (CairoConfigTaskBar);
194
pModule->iSizeOfData = 0;
196
pModule->reload = (CairoDockInternalModuleReloadFunc) reload;
197
pModule->get_config = (CairoDockInternalModuleGetConfigFunc) get_config;
198
pModule->reset_config = (CairoDockInternalModuleResetConfigFunc) reset_config;
199
pModule->reset_data = NULL;
201
pModule->pConfig = (CairoInternalModuleConfigPtr) &myTaskBar;
202
pModule->pData = NULL;