~cairo-dock-team/ubuntu/natty/cairo-dock-plug-ins/2.3.0-2.1

« back to all changes in this revision

Viewing changes to switcher/src/applet-desktops.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthieu Baerts (matttbe)
  • Date: 2010-08-10 00:05:57 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20100810000557-pfxoz5w7hbyclcqh
Tags: 2.2.0~0beta4-0ubuntu1
* New Upstream Version (LP: #614625)
* Fixed a few bugs on LP:
 - LP: #483963: Dustbin applet does not display trashes on all volumes
 - LP: #485159: Some apps have problem with Systray
 - LP: #500677: ~/.xsession-errors is too much used by CD
 - LP: #500979: Shortcuts: the order gets messed up
 - LP: #521531: Mail: crashes on Maildir
 - LP: #519915: GTG: create a new applet to control GTG
 - LP: #526138: GMenu doesn't handle desktop file exec strings properly
 - LP: #531317: CMake: Added an error if the prefix of 'cairo-dock-plugins'
                 is not the same 'cairo-dock-core'
 - LP: #531319: CMake: check the version of 'cairo-dock' when building
                 'cairo-dock-plugins'
 - LP: #537115: Click at the position where icon lavel was, the icon
                 and dock still receive the event
 - LP: #537943: Terminal applet shortkey behaviour
 - LP: #538637: Trash applet doesn't create .trashinfo files on XFCE
 - More details on the 'ChangeLog' file
* debian/rules:
 - Autotools has been replaced by CMake
 - cdbs is now used.
* debian/copyright:
 - Updated with the new applets
* debian/control:
 - Autotools has been replaced by CMake
 - Added libcurl4-gnutls-dev, libindicator-dev, libdbusmenu-glib-dev
   libido-0.1-dev, libical-dev, libdbusmenu-gtk-dev as Build-deps
 - Bump Standard-Version to 3.9.1
 - Wget is required for dnd2share applet
 - Added the exact realease for 'cairo-dock-dev' in order to prevent any
    build error if this package is not already available (thx to didrocks)
* debian/cairo-dock-plug-ins*.install:
 - All sonames are now installed into lib32 or lib64 (lib*)

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
        cairo_dock_get_current_desktop_and_viewport (&myData.switcher.iCurrentDesktop, &myData.switcher.iCurrentViewportX, &myData.switcher.iCurrentViewportY);
31
31
        //g_print ("%s () -> %d;%d;%d\n", __func__, myData.switcher.iCurrentDesktop, myData.switcher.iCurrentViewportX, myData.switcher.iCurrentViewportY);
32
32
        
33
 
        myData.switcher.iNbViewportTotal = g_iNbDesktops * g_iNbViewportX * g_iNbViewportY;
 
33
        myData.switcher.iNbViewportTotal = g_desktopGeometry.iNbDesktops * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY;
34
34
        
35
35
        cd_switcher_compute_desktop_coordinates (myData.switcher.iCurrentDesktop, myData.switcher.iCurrentViewportX, myData.switcher.iCurrentViewportY, &myData.switcher.iCurrentLine, &myData.switcher.iCurrentColumn);
36
36
}
43
43
        //g_print ("%s (%d)\n", __func__, iNbViewports);
44
44
        double fZoomX, fZoomY;
45
45
        int iNbLines, iNbDesktopByLine;
 
46
        int Nx, Ny;
46
47
        
47
 
        if (myConfig.bPreserveScreenRatio)  // on va chercher a minimiser la deformation de l'image de fond d'ecran.
 
48
        ///if (myConfig.bPreserveScreenRatio)  // on va chercher a minimiser la deformation de l'image de fond d'ecran.
48
49
        {
 
50
                int w, h;
 
51
                cairo_dock_get_icon_extent (myIcon, myContainer, &w, &h);
49
52
                double fRatio, fMinRatio=9999;
50
53
                for (iNbLines = 1; iNbLines <= iNbViewports; iNbLines ++)
51
54
                {
52
 
                        if (iNbViewports % iNbLines != 0)
53
 
                                continue;
 
55
                        ///if (iNbViewports % iNbLines != 0)
 
56
                        ///     continue;
54
57
                        iNbDesktopByLine = iNbViewports / iNbLines;
55
 
                        fZoomX = myIcon->fWidth / (iNbDesktopByLine * g_iXScreenWidth[CAIRO_DOCK_HORIZONTAL]);
56
 
                        fZoomY = myIcon->fHeight / (iNbLines * g_iXScreenHeight[CAIRO_DOCK_HORIZONTAL]);
 
58
                        fZoomX = (double)w / (iNbDesktopByLine * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL]);
 
59
                        fZoomY = (double)h / (iNbLines * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL]);
57
60
                        fRatio = (fZoomX > fZoomY ? fZoomX / fZoomY : fZoomY / fZoomX);  // ratio ramene dans [1, inf].
58
61
                        //cd_debug ("%d lignes => fRatio: %.2f", iNbLines, fRatio);
59
62
                        if (fRatio < fMinRatio)
64
67
                        }
65
68
                }
66
69
        }
67
 
        else  // on va chercher a repartir au mieux les bureaux sur l'icone.
 
70
        /**else  // on va chercher a repartir au mieux les bureaux sur l'icone.
68
71
        {
69
72
                if (myIcon->fWidth >= myIcon->fHeight)
70
73
                {
76
79
                        *iBestNbLines = (int) ceil (sqrt (iNbViewports));
77
80
                        *iBestNbColumns = (int) ceil ((double)iNbViewports / (*iBestNbLines));
78
81
                }
79
 
        }
 
82
        }*/
 
83
        
80
84
}
81
85
void cd_switcher_compute_nb_lines_and_columns (void)
82
86
{
83
 
        if (g_iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
 
87
        if (g_desktopGeometry.iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
84
88
        {
85
 
                if (g_iNbViewportX * g_iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
 
89
                if (g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
86
90
                {
87
 
                        myData.switcher.iNbLines = g_iNbDesktops;  // on respecte l'agencement de l'utilisateur (groupement par bureau).
88
 
                        myData.switcher.iNbColumns = g_iNbViewportX * g_iNbViewportY;
 
91
                        myData.switcher.iNbLines = g_desktopGeometry.iNbDesktops;  // on respecte l'agencement de l'utilisateur (groupement par bureau).
 
92
                        myData.switcher.iNbColumns = g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY;
89
93
                }
90
94
                else  // plusieurs bureaux simples (Metacity)
91
95
                {
92
 
                        _cd_switcher_get_best_agencement (g_iNbDesktops, &myData.switcher.iNbLines, &myData.switcher.iNbColumns);
 
96
                        _cd_switcher_get_best_agencement (g_desktopGeometry.iNbDesktops, &myData.switcher.iNbLines, &myData.switcher.iNbColumns);
93
97
                }
94
98
        }
95
99
        else  // un seul bureau etendu.
96
100
        {
97
 
                if (g_iNbViewportY > 1)  // desktop wall.
 
101
                if (g_desktopGeometry.iNbViewportY > 1)  // desktop wall.
98
102
                {
99
 
                        myData.switcher.iNbLines = g_iNbViewportY;  // on respecte l'agencement de l'utilisateur.
100
 
                        myData.switcher.iNbColumns = g_iNbViewportX;
 
103
                        myData.switcher.iNbLines = g_desktopGeometry.iNbViewportY;  // on respecte l'agencement de l'utilisateur.
 
104
                        myData.switcher.iNbColumns = g_desktopGeometry.iNbViewportX;
101
105
                }
102
106
                else  // cube.
103
107
                {
104
 
                        _cd_switcher_get_best_agencement (g_iNbViewportX, &myData.switcher.iNbLines, &myData.switcher.iNbColumns);
 
108
                        _cd_switcher_get_best_agencement (g_desktopGeometry.iNbViewportX, &myData.switcher.iNbLines, &myData.switcher.iNbColumns);
105
109
                }
106
110
        }
107
111
        myData.iPrevIndexHovered = -1;  // cela invalide le dernier bureau survole.
112
116
{
113
117
        g_return_if_fail (myData.switcher.iNbColumns != 0);
114
118
        //cd_debug ("%s (%d;%d)", __func__, iNumViewportX, iNumViewportY);
115
 
        if (g_iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
 
119
        if (g_desktopGeometry.iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
116
120
        {
117
 
                if (g_iNbViewportX * g_iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
 
121
                if (g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
118
122
                {
119
123
                        *iNumLine = iNumDesktop;
120
 
                        *iNumColumn = iNumViewportY * g_iNbViewportX + iNumViewportX;
 
124
                        *iNumColumn = iNumViewportY * g_desktopGeometry.iNbViewportX + iNumViewportX;
121
125
                }
122
126
                else  // plusieurs bureaux simples (Metacity)
123
127
                {
127
131
        }
128
132
        else  // un seul bureau etendu.
129
133
        {
130
 
                if (g_iNbViewportY > 1)  // desktop wall.
 
134
                if (g_desktopGeometry.iNbViewportY > 1)  // desktop wall.
131
135
                {
132
136
                        *iNumLine = iNumViewportY;
133
137
                        *iNumColumn = iNumViewportX;
143
147
 
144
148
void cd_switcher_compute_desktop_from_coordinates (int iNumLine, int iNumColumn, int *iNumDesktop, int *iNumViewportX, int *iNumViewportY)
145
149
{
146
 
        if (g_iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
 
150
        if (g_desktopGeometry.iNbDesktops > 1)  // plusieurs bureaux simples (Metacity) ou etendus (Compiz avec 2 cubes).
147
151
        {
148
 
                if (g_iNbViewportX * g_iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
 
152
                if (g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY > 1)  // plusieurs bureaux etendus (Compiz avec N cubes).
149
153
                {
150
154
                        *iNumDesktop = iNumLine;
151
 
                        *iNumViewportX = iNumColumn % g_iNbViewportX;
152
 
                        *iNumViewportY = iNumColumn / g_iNbViewportX;
 
155
                        *iNumViewportX = iNumColumn % g_desktopGeometry.iNbViewportX;
 
156
                        *iNumViewportY = iNumColumn / g_desktopGeometry.iNbViewportX;
153
157
                }
154
158
                else  // plusieurs bureaux simples (Metacity)
155
159
                {
161
165
        else  // un seul bureau etendu.
162
166
        {
163
167
                *iNumDesktop = 0;
164
 
                if (g_iNbViewportY > 1)  // desktop wall.
 
168
                if (g_desktopGeometry.iNbViewportY > 1)  // desktop wall.
165
169
                {
166
170
                        *iNumViewportX = iNumColumn;
167
171
                        *iNumViewportY = iNumLine;
177
181
 
178
182
int cd_switcher_compute_index (int iNumDesktop, int iNumViewportX, int iNumViewportY)
179
183
{
180
 
        return iNumDesktop * g_iNbViewportX * g_iNbViewportY + iNumViewportX * g_iNbViewportY + iNumViewportY;
 
184
        return iNumDesktop * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY + iNumViewportX * g_desktopGeometry.iNbViewportY + iNumViewportY;
181
185
}
182
186
 
183
187
void cd_switcher_compute_viewports_from_index (int iIndex, int *iNumDesktop, int *iNumViewportX, int *iNumViewportY)
184
188
{
185
 
        if (g_iNbViewportX == 0 || g_iNbViewportY == 0)  // des fois (chgt de resolution sous Compiz), le rafraichissement se passe mal, on le force donc ici pour eviter une division par 0.
 
189
        if (g_desktopGeometry.iNbViewportX == 0 || g_desktopGeometry.iNbViewportY == 0)  // des fois (chgt de resolution sous Compiz), le rafraichissement se passe mal, on le force donc ici pour eviter une division par 0.
186
190
        {
187
191
                cd_switcher_refresh_desktop_values (myApplet);
188
192
        }
189
 
        g_return_if_fail (g_iNbViewportX > 0 && g_iNbViewportY > 0);
 
193
        g_return_if_fail (g_desktopGeometry.iNbViewportX > 0 && g_desktopGeometry.iNbViewportY > 0);
190
194
        
191
 
        *iNumDesktop = iIndex / (g_iNbViewportX * g_iNbViewportY);
192
 
        int index2 = iIndex % (g_iNbViewportX * g_iNbViewportY);
193
 
        *iNumViewportX = index2 / g_iNbViewportY;
194
 
        *iNumViewportY = index2 % g_iNbViewportY;
 
195
        *iNumDesktop = iIndex / (g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY);
 
196
        int index2 = iIndex % (g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY);
 
197
        *iNumViewportX = index2 / g_desktopGeometry.iNbViewportY;
 
198
        *iNumViewportY = index2 % g_desktopGeometry.iNbViewportY;
195
199
        //g_print (" -> %d;%d;%d\n", *iNumDesktop, *iNumViewportX, *iNumViewportY);
196
200
}
197
201
 
198
202
 
199
203
static void cd_switcher_change_nb_desktops (int iDeltaNbDesktops)
200
204
{
201
 
        if (g_iNbDesktops >= g_iNbViewportX * g_iNbViewportY)
 
205
        if (g_desktopGeometry.iNbDesktops >= g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY)
202
206
        {
203
 
                cairo_dock_set_nb_desktops (g_iNbDesktops + iDeltaNbDesktops);
 
207
                cairo_dock_set_nb_desktops (g_desktopGeometry.iNbDesktops + iDeltaNbDesktops);
204
208
        }
205
209
        else
206
210
        {
207
 
                if (g_iNbViewportX >= g_iNbViewportY)
208
 
                        cairo_dock_set_nb_viewports (g_iNbViewportX + iDeltaNbDesktops, g_iNbViewportY);
 
211
                if (g_desktopGeometry.iNbViewportX >= g_desktopGeometry.iNbViewportY)
 
212
                        cairo_dock_set_nb_viewports (g_desktopGeometry.iNbViewportX + iDeltaNbDesktops, g_desktopGeometry.iNbViewportY);
209
213
                else
210
 
                        cairo_dock_set_nb_viewports (g_iNbViewportX, g_iNbViewportY + iDeltaNbDesktops);
 
214
                        cairo_dock_set_nb_viewports (g_desktopGeometry.iNbViewportX, g_desktopGeometry.iNbViewportY + iDeltaNbDesktops);
211
215
        }
212
216
}
213
217
 
239
243
 
240
244
gboolean cd_switcher_refresh_desktop_values (CairoDockModuleInstance *myApplet)
241
245
{
242
 
        g_iNbDesktops = cairo_dock_get_nb_desktops ();
243
 
        cairo_dock_get_nb_viewports (&g_iNbViewportX, &g_iNbViewportY);
 
246
        g_desktopGeometry.iNbDesktops = cairo_dock_get_nb_desktops ();
 
247
        cairo_dock_get_nb_viewports (&g_desktopGeometry.iNbViewportX, &g_desktopGeometry.iNbViewportY);
 
248
        g_print ("refresh -> %d/%d/%d\n", g_desktopGeometry.iNbDesktops, g_desktopGeometry.iNbViewportX, g_desktopGeometry.iNbViewportY);
244
249
        cd_switcher_update_from_screen_geometry ();
245
250
        myData.iSidAutoRefresh = 0;
246
251
        return FALSE;