~ubuntu-branches/ubuntu/oneiric/cairo-dock/oneiric

« back to all changes in this revision

Viewing changes to src/cairo-dock-internal-taskbar.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthieu Baerts (matttbe)
  • Date: 2010-08-09 23:26:12 UTC
  • mto: (18.1.1 cairo-dock) (19.1.1 cairo-dock)
  • mto: This revision was merged to the branch mainline in revision 13.
  • Revision ID: james.westby@ubuntu.com-20100809232612-pocdxliaxjdetm37
Tags: upstream-2.2.0~0beta4
ImportĀ upstreamĀ versionĀ 2.2.0~0beta4

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
* This file is a part of the Cairo-Dock project
3
 
*
4
 
* Copyright : (C) see the 'copyright' file.
5
 
* E-mail    : see the 'copyright' file.
6
 
*
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.
11
 
*
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/>.
18
 
*/
19
 
 
20
 
#include <gdk/gdkx.h>
21
 
 
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"
37
 
 
38
 
CairoConfigTaskBar myTaskBar;
39
 
extern CairoDock *g_pMainDock;
40
 
 
41
 
static gboolean get_config (GKeyFile *pKeyFile, CairoConfigTaskBar *pTaskBar)
42
 
{
43
 
        gboolean bFlushConfFileNeeded = FALSE;
44
 
        
45
 
        // comportement
46
 
        pTaskBar->bShowAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "show applications", &bFlushConfFileNeeded, TRUE, "Applications", NULL);
47
 
        
48
 
        pTaskBar->bAppliOnCurrentDesktopOnly = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "current desktop only", &bFlushConfFileNeeded, FALSE, "Applications", NULL);
49
 
        
50
 
        pTaskBar->bMixLauncherAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "mix launcher appli", &bFlushConfFileNeeded, TRUE, NULL, NULL);
51
 
        
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)
55
 
        {
56
 
                int i;
57
 
                for (i = 0; pTaskBar->cGroupException[i] != '\0'; i ++)  // on passe tout en minuscule.
58
 
                        pTaskBar->cGroupException[i] = g_ascii_tolower (pTaskBar->cGroupException[i]);
59
 
        }
60
 
        
61
 
        pTaskBar->bHideVisibleApplis = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "hide visible", &bFlushConfFileNeeded, FALSE, "Applications", NULL);
62
 
        
63
 
        
64
 
        // representation
65
 
        pTaskBar->bDrawIndicatorOnAppli = cairo_dock_get_boolean_key_value (pKeyFile, "TaskBar", "indic on appli", &bFlushConfFileNeeded, FALSE, NULL, NULL);
66
 
        
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)
70
 
        {
71
 
                int i;
72
 
                for (i = 0; pTaskBar->cOverwriteException[i] != '\0'; i ++)
73
 
                        pTaskBar->cOverwriteException[i] = g_ascii_tolower (pTaskBar->cOverwriteException[i]);
74
 
        }
75
 
        
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.
79
 
        {
80
 
                gboolean bShowThumbnail = g_key_file_get_boolean (pKeyFile, "TaskBar", "window thumbnail", NULL);
81
 
                if (bShowThumbnail)
82
 
                        pTaskBar->iMinimizedWindowRenderType = 1;
83
 
                else
84
 
                        pTaskBar->iMinimizedWindowRenderType = 0;
85
 
                g_key_file_set_integer (pKeyFile, "TaskBar", "minimized", pTaskBar->iMinimizedWindowRenderType);
86
 
        }
87
 
        
88
 
        if (pTaskBar->iMinimizedWindowRenderType == 1 && ! cairo_dock_xcomposite_is_available ())
89
 
        {
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;
92
 
        }
93
 
        if (pTaskBar->iMinimizedWindowRenderType == 0)
94
 
                pTaskBar->fVisibleAppliAlpha = MIN (.6, cairo_dock_get_double_key_value (pKeyFile, "TaskBar", "visibility alpha", &bFlushConfFileNeeded, .35, "Applications", NULL));
95
 
        
96
 
        pTaskBar->iAppliMaxNameLength = cairo_dock_get_integer_key_value (pKeyFile, "TaskBar", "max name length", &bFlushConfFileNeeded, 15, "Applications", NULL);
97
 
        
98
 
        
99
 
        // interaction
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);
102
 
        
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)
108
 
        {
109
 
                pTaskBar->cForceDemandsAttention = g_ascii_strdown (cForceDemandsAttention, -1);
110
 
                g_free (cForceDemandsAttention);
111
 
        }
112
 
        
113
 
        pTaskBar->cAnimationOnActiveWindow = cairo_dock_get_string_key_value (pKeyFile, "TaskBar", "animation on active window", &bFlushConfFileNeeded, "wobbly", NULL, NULL);
114
 
        
115
 
        return bFlushConfFileNeeded;
116
 
}
117
 
 
118
 
 
119
 
static void reset_config (CairoConfigTaskBar *pTaskBar)
120
 
{
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);
126
 
}
127
 
 
128
 
static void _set_indicator (Icon *pIcon, CairoContainer *pContainer, gpointer data)
129
 
{
130
 
        pIcon->bHasIndicator = GPOINTER_TO_INT (data);
131
 
}
132
 
static void reload (CairoConfigTaskBar *pPrevTaskBar, CairoConfigTaskBar *pTaskBar)
133
 
{
134
 
        CairoDock *pDock = g_pMainDock;
135
 
        
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.
149
 
        {
150
 
                cairo_dock_stop_application_manager ();
151
 
                bUpdateSize = TRUE;
152
 
        }
153
 
        
154
 
        if (cairo_dock_application_manager_is_running () &&
155
 
                pPrevTaskBar->bDrawIndicatorOnAppli != pTaskBar->bDrawIndicatorOnAppli)
156
 
        {
157
 
                cairo_dock_foreach_applis ((CairoDockForeachIconFunc) _set_indicator, FALSE, GINT_TO_POINTER (pTaskBar->bDrawIndicatorOnAppli));
158
 
                gtk_widget_queue_draw (pDock->container.pWidget);
159
 
        }
160
 
        
161
 
        if (! cairo_dock_application_manager_is_running () && pTaskBar->bShowAppli)  // maintenant on veut voir les applis !
162
 
        {
163
 
                cairo_dock_start_application_manager (pDock);  // va inserer le separateur si necessaire.
164
 
                bUpdateSize = TRUE;
165
 
        }
166
 
        else
167
 
                gtk_widget_queue_draw (pDock->container.pWidget);  // pour le fVisibleAlpha
168
 
        
169
 
        if (pPrevTaskBar->bShowAppli != pTaskBar->bShowAppli ||
170
 
                pPrevTaskBar->bGroupAppliByClass != pTaskBar->bGroupAppliByClass)
171
 
        {
172
 
                double fMaxScale = cairo_dock_get_max_scale (pDock);
173
 
                cairo_dock_load_class_indicator (pTaskBar->bShowAppli && pTaskBar->bGroupAppliByClass ? myIndicators.cClassIndicatorImagePath : NULL, fMaxScale);
174
 
        }
175
 
        
176
 
        if (bUpdateSize)
177
 
        {
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.
180
 
                
181
 
                cairo_dock_place_root_dock (pDock);
182
 
        }
183
 
}
184
 
 
185
 
 
186
 
DEFINE_PRE_INIT (TaskBar)
187
 
{
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;
195
 
        
196
 
        pModule->reload = (CairoDockInternalModuleReloadFunc) reload;
197
 
        pModule->get_config = (CairoDockInternalModuleGetConfigFunc) get_config;
198
 
        pModule->reset_config = (CairoDockInternalModuleResetConfigFunc) reset_config;
199
 
        pModule->reset_data = NULL;
200
 
        
201
 
        pModule->pConfig = (CairoInternalModuleConfigPtr) &myTaskBar;
202
 
        pModule->pData = NULL;
203
 
}