1
/* Workspace.c- workspace options
3
* WPrefs - Window Maker Preferences Program
5
* Copyright (c) 1998-2003 Alfredo K. Kojima
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (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.
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
27
typedef struct _Panel {
34
CallbackRec callbacks;
58
#define ICON_FILE "workspace"
60
#define ARQUIVO_XIS "xis"
61
#define DONT_LINK_FILE "dontlinkworkspaces"
62
#define CYCLE_FILE "cycleworkspaces"
63
#define ADVANCE_FILE "advancetonewworkspace"
64
#define WSNAME_FILE "workspacename"
65
#define DOCK_FILE "dock"
66
#define CLIP_FILE "clip"
69
static char *WSNamePositions[] = {
82
createImages(WMScreen *scr, RContext *rc, RImage *xis, char *file,
83
WMPixmap **icon1, WMPixmap **icon2)
86
RColor gray = {0xae,0xaa,0xae};
88
*icon1 = WMCreatePixmapFromFile(scr, file);
90
wwarning(_("could not load icon %s"), file);
99
icon = RLoadImage(rc, file, 0);
101
wwarning(_("could not load icon %s"), file);
105
RCombineImageWithColor(icon, &gray);
107
RCombineImagesWithOpaqueness(icon, xis, 180);
108
if (!(*icon2 = WMCreatePixmapFromRImage(scr, icon, 127))) {
109
wwarning(_("could not process icon %s:"), file, RMessageForError(RErrorCode));
119
showData(_Panel *panel)
124
WMSetButtonSelected(panel->linkB, !GetBoolForKey("DontLinkWorkspaces"));
126
WMSetButtonSelected(panel->cyclB, GetBoolForKey("CycleWorkspaces"));
128
WMSetButtonSelected(panel->newB, GetBoolForKey("AdvanceToNewWorkspace"));
130
WMSetButtonSelected(panel->dockB, !GetBoolForKey("DisableDock"));
132
WMSetButtonSelected(panel->clipB, !GetBoolForKey("DisableClip"));
134
str = GetStringForKey("WorkspaceNameDisplayPosition");
138
idx = 1; /* center */
139
for (i = 0; i < sizeof(WSNamePositions)/sizeof(char*); i++) {
140
if (strcasecmp(WSNamePositions[i], str) == 0) {
145
WMSetPopUpButtonSelectedItem(panel->posP, idx);
151
createPanel(Panel *p)
153
_Panel *panel = (_Panel*)p;
154
WMScreen *scr = WMWidgetScreen(panel->parent);
155
WMPixmap *icon1, *icon2;
157
RContext *rc = WMScreenRContext(scr);
160
path = LocateImage(ARQUIVO_XIS);
162
xis = RLoadImage(rc, path, 0);
164
wwarning(_("could not load image file %s"), path);
169
panel->box = WMCreateBox(panel->parent);
170
WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
172
/***************** Workspace Navigation *****************/
173
panel->navF = WMCreateFrame(panel->box);
174
WMResizeWidget(panel->navF, 365, 210);
175
WMMoveWidget(panel->navF, 15, 10);
176
WMSetFrameTitle(panel->navF, _("Workspace Navigation"));
179
panel->cyclB = WMCreateSwitchButton(panel->navF);
180
WMResizeWidget(panel->cyclB, 280, 34);
181
WMMoveWidget(panel->cyclB, 75, 30);
182
WMSetButtonText(panel->cyclB,
183
_("Wrap to the first workspace from the last workspace."));
185
panel->cyclL = WMCreateLabel(panel->navF);
186
WMResizeWidget(panel->cyclL, 60, 60);
187
WMMoveWidget(panel->cyclL, 10, 15);
188
WMSetLabelImagePosition(panel->cyclL, WIPImageOnly);
189
path = LocateImage(CYCLE_FILE);
191
createImages(scr, rc, xis, path, &icon1, NULL);
193
WMSetLabelImage(panel->cyclL, icon1);
194
WMReleasePixmap(icon1);
201
panel->linkB = WMCreateSwitchButton(panel->navF);
202
WMResizeWidget(panel->linkB, 280, 34);
203
WMMoveWidget(panel->linkB, 75, 75);
204
WMSetButtonText(panel->linkB,
205
_("Switch workspaces while dragging windows."));
207
panel->linkL = WMCreateLabel(panel->navF);
208
WMResizeWidget(panel->linkL, 60, 40);
209
WMMoveWidget(panel->linkL, 10, 80);
210
WMSetLabelImagePosition(panel->linkL, WIPImageOnly);
211
path = LocateImage(DONT_LINK_FILE);
213
createImages(scr, rc, xis, path, &icon1, NULL);
215
WMSetLabelImage(panel->linkL, icon1);
216
WMReleasePixmap(icon1);
223
panel->newB = WMCreateSwitchButton(panel->navF);
224
WMResizeWidget(panel->newB, 280, 34);
225
WMMoveWidget(panel->newB, 75, 120);
226
WMSetButtonText(panel->newB,
227
_("Automatically create new workspaces."));
229
panel->newL = WMCreateLabel(panel->navF);
230
WMResizeWidget(panel->newL, 60, 20);
231
WMMoveWidget(panel->newL, 10, 130);
232
WMSetLabelImagePosition(panel->newL, WIPImageOnly);
233
path = LocateImage(ADVANCE_FILE);
235
createImages(scr, rc, xis, path, &icon1, NULL);
237
WMSetLabelImage(panel->newL, icon1);
238
WMReleasePixmap(icon1);
245
panel->posL = WMCreateLabel(panel->navF);
246
WMResizeWidget(panel->posL, 140, 30);
247
WMMoveWidget(panel->posL, 75, 165);
248
WMSetLabelTextAlignment(panel->posL, WARight);
249
WMSetLabelText(panel->posL,
250
_("Position of workspace\nname display"));
252
panel->posiL = WMCreateLabel(panel->navF);
253
WMResizeWidget(panel->posiL, 60, 40);
254
WMMoveWidget(panel->posiL, 10, 160);
255
WMSetLabelImagePosition(panel->posiL, WIPImageOnly);
256
path = LocateImage(WSNAME_FILE);
258
createImages(scr, rc, xis, path, &icon1, NULL);
260
WMSetLabelImage(panel->posiL, icon1);
261
WMReleasePixmap(icon1);
266
panel->posP = WMCreatePopUpButton(panel->navF);
267
WMResizeWidget(panel->posP, 125, 20);
268
WMMoveWidget(panel->posP, 225, 175);
269
WMAddPopUpButtonItem(panel->posP, _("Disable"));
270
WMAddPopUpButtonItem(panel->posP, _("Center"));
271
WMAddPopUpButtonItem(panel->posP, _("Top"));
272
WMAddPopUpButtonItem(panel->posP, _("Bottom"));
273
WMAddPopUpButtonItem(panel->posP, _("Top/Left"));
274
WMAddPopUpButtonItem(panel->posP, _("Top/Right"));
275
WMAddPopUpButtonItem(panel->posP, _("Bottom/Left"));
276
WMAddPopUpButtonItem(panel->posP, _("Bottom/Right"));
278
WMMapSubwidgets(panel->navF);
280
/***************** Dock/Clip *****************/
281
panel->dockF = WMCreateFrame(panel->box);
282
WMResizeWidget(panel->dockF, 115, 210);
283
WMMoveWidget(panel->dockF, 390, 10);
284
WMSetFrameTitle(panel->dockF, _("Dock/Clip"));
286
panel->dockB = WMCreateButton(panel->dockF, WBTToggle);
287
WMResizeWidget(panel->dockB, 64, 64);
288
WMMoveWidget(panel->dockB, 25, 35);
289
WMSetButtonImagePosition(panel->dockB, WIPImageOnly);
290
path = LocateImage(DOCK_FILE);
292
createImages(scr, rc, xis, path, &icon1, &icon2);
294
WMSetButtonImage(panel->dockB, icon2);
295
WMReleasePixmap(icon2);
298
WMSetButtonAltImage(panel->dockB, icon1);
299
WMReleasePixmap(icon1);
303
WMSetBalloonTextForView(_("Disable/enable the application Dock (the\n"
304
"vertical icon bar in the side of the screen)."),
305
WMWidgetView(panel->dockB));
307
panel->clipB = WMCreateButton(panel->dockF, WBTToggle);
308
WMResizeWidget(panel->clipB, 64, 64);
309
WMMoveWidget(panel->clipB, 25, 120);
310
WMSetButtonImagePosition(panel->clipB, WIPImageOnly);
311
path = LocateImage(CLIP_FILE);
313
createImages(scr, rc, xis, path, &icon1, &icon2);
315
WMSetButtonImage(panel->clipB, icon2);
316
WMReleasePixmap(icon2);
319
WMSetButtonAltImage(panel->clipB, icon1);
320
WMReleasePixmap(icon1);
324
WMSetBalloonTextForView(_("Disable/enable the Clip (that thing with\n"
325
"a paper clip icon)."),
326
WMWidgetView(panel->clipB));
328
WMMapSubwidgets(panel->dockF);
333
WMRealizeWidget(panel->box);
334
WMMapSubwidgets(panel->box);
341
storeData(_Panel *panel)
343
SetBoolForKey(!WMGetButtonSelected(panel->linkB), "DontLinkWorkspaces");
344
SetBoolForKey(WMGetButtonSelected(panel->cyclB), "CycleWorkspaces");
345
SetBoolForKey(WMGetButtonSelected(panel->newB), "AdvanceToNewWorkspace");
347
SetBoolForKey(!WMGetButtonSelected(panel->dockB), "DisableDock");
348
SetBoolForKey(!WMGetButtonSelected(panel->clipB), "DisableClip");
350
SetStringForKey(WSNamePositions[WMGetPopUpButtonSelectedItem(panel->posP)],
351
"WorkspaceNameDisplayPosition");
357
InitWorkspace(WMScreen *scr, WMWidget *parent)
361
panel = wmalloc(sizeof(_Panel));
362
memset(panel, 0, sizeof(_Panel));
364
panel->sectionName = _("Workspace Preferences");
366
panel->description = _("Workspace navigation features.\n"
367
"You can also enable/disable the Dock and Clip here.");
369
panel->parent = parent;
371
panel->callbacks.createWidgets = createPanel;
372
panel->callbacks.updateDomain = storeData;
374
AddSection(panel, ICON_FILE);