X-Git-Url: https://repo.or.cz/w/wmaker-crm.git/blobdiff_plain/59fc927dc9f183802621138534fa6eaafe5593ba..688a56e8ab67b56550e2874d9d7423f0d435bfd9:/WPrefs.app/Workspace.c diff --git a/WPrefs.app/Workspace.c b/WPrefs.app/Workspace.c dissimilarity index 86% index 35b16569..e4fcf74f 100644 --- a/WPrefs.app/Workspace.c +++ b/WPrefs.app/Workspace.c @@ -1,378 +1,346 @@ -/* Workspace.c- workspace options - * - * WPrefs - Window Maker Preferences Program - * - * Copyright (c) 1998-2003 Alfredo K. Kojima - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - - -#include "WPrefs.h" - - -typedef struct _Panel { - WMBox *box; - - char *sectionName; - - char *description; - - CallbackRec callbacks; - - WMWidget *parent; - - WMFrame *navF; - - WMButton *linkB; - WMButton *cyclB; - WMButton *newB; - WMLabel *linkL; - WMLabel *cyclL; - WMLabel *newL; - - WMLabel *posiL; - WMLabel *posL; - WMPopUpButton *posP; - - WMFrame *dockF; - WMButton *dockB; - WMButton *clipB; -} _Panel; - - - -#define ICON_FILE "workspace" - -#define ARQUIVO_XIS "xis" -#define DONT_LINK_FILE "dontlinkworkspaces" -#define CYCLE_FILE "cycleworkspaces" -#define ADVANCE_FILE "advancetonewworkspace" -#define WSNAME_FILE "workspacename" -#define DOCK_FILE "dock" -#define CLIP_FILE "clip" - - -static char *WSNamePositions[] = { - "none", - "center", - "top", - "bottom", - "topleft", - "topright", - "bottomleft", - "bottomright" -}; - - -static void -createImages(WMScreen *scr, RContext *rc, RImage *xis, char *file, - WMPixmap **icon1, WMPixmap **icon2) -{ - RImage *icon; - RColor gray = {0xae,0xaa,0xae}; - - *icon1 = WMCreatePixmapFromFile(scr, file); - if (!*icon1) { - wwarning(_("could not load icon %s"), file); - if (icon2) - *icon2 = NULL; - return; - } - - if (!icon2) - return; - - icon = RLoadImage(rc, file, 0); - if (!icon) { - wwarning(_("could not load icon %s"), file); - *icon2 = NULL; - return; - } - RCombineImageWithColor(icon, &gray); - if (xis) { - RCombineImagesWithOpaqueness(icon, xis, 180); - if (!(*icon2 = WMCreatePixmapFromRImage(scr, icon, 127))) { - wwarning(_("could not process icon %s:"), file, RMessageForError(RErrorCode)); - *icon2 = NULL; - } - } - RReleaseImage(icon); -} - - - -static void -showData(_Panel *panel) -{ - int i, idx; - char *str; - - WMSetButtonSelected(panel->linkB, !GetBoolForKey("DontLinkWorkspaces")); - - WMSetButtonSelected(panel->cyclB, GetBoolForKey("CycleWorkspaces")); - - WMSetButtonSelected(panel->newB, GetBoolForKey("AdvanceToNewWorkspace")); - - WMSetButtonSelected(panel->dockB, !GetBoolForKey("DisableDock")); - - WMSetButtonSelected(panel->clipB, !GetBoolForKey("DisableClip")); - - str = GetStringForKey("WorkspaceNameDisplayPosition"); - if (!str) - str = "center"; - - idx = 1; /* center */ - for (i = 0; i < sizeof(WSNamePositions)/sizeof(char*); i++) { - if (strcasecmp(WSNamePositions[i], str) == 0) { - idx = i; - break; - } - } - WMSetPopUpButtonSelectedItem(panel->posP, idx); -} - - - -static void -createPanel(Panel *p) -{ - _Panel *panel = (_Panel*)p; - WMScreen *scr = WMWidgetScreen(panel->parent); - WMPixmap *icon1, *icon2; - RImage *xis = NULL; - RContext *rc = WMScreenRContext(scr); - char *path; - - path = LocateImage(ARQUIVO_XIS); - if (path) { - xis = RLoadImage(rc, path, 0); - if (!xis) { - wwarning(_("could not load image file %s"), path); - } - wfree(path); - } - - panel->box = WMCreateBox(panel->parent); - WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2); - - /***************** Workspace Navigation *****************/ - panel->navF = WMCreateFrame(panel->box); - WMResizeWidget(panel->navF, 365, 210); - WMMoveWidget(panel->navF, 15, 10); - WMSetFrameTitle(panel->navF, _("Workspace Navigation")); - - - panel->cyclB = WMCreateSwitchButton(panel->navF); - WMResizeWidget(panel->cyclB, 280, 34); - WMMoveWidget(panel->cyclB, 75, 30); - WMSetButtonText(panel->cyclB, - _("Wrap to the first workspace from the last workspace.")); - - panel->cyclL = WMCreateLabel(panel->navF); - WMResizeWidget(panel->cyclL, 60, 60); - WMMoveWidget(panel->cyclL, 10, 15); - WMSetLabelImagePosition(panel->cyclL, WIPImageOnly); - path = LocateImage(CYCLE_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, NULL); - if (icon1) { - WMSetLabelImage(panel->cyclL, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - - /**/ - - panel->linkB = WMCreateSwitchButton(panel->navF); - WMResizeWidget(panel->linkB, 280, 34); - WMMoveWidget(panel->linkB, 75, 75); - WMSetButtonText(panel->linkB, - _("Switch workspaces while dragging windows.")); - - panel->linkL = WMCreateLabel(panel->navF); - WMResizeWidget(panel->linkL, 60, 40); - WMMoveWidget(panel->linkL, 10, 80); - WMSetLabelImagePosition(panel->linkL, WIPImageOnly); - path = LocateImage(DONT_LINK_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, NULL); - if (icon1) { - WMSetLabelImage(panel->linkL, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - - /**/ - - panel->newB = WMCreateSwitchButton(panel->navF); - WMResizeWidget(panel->newB, 280, 34); - WMMoveWidget(panel->newB, 75, 120); - WMSetButtonText(panel->newB, - _("Automatically create new workspaces.")); - - panel->newL = WMCreateLabel(panel->navF); - WMResizeWidget(panel->newL, 60, 20); - WMMoveWidget(panel->newL, 10, 130); - WMSetLabelImagePosition(panel->newL, WIPImageOnly); - path = LocateImage(ADVANCE_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, NULL); - if (icon1) { - WMSetLabelImage(panel->newL, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - - /**/ - - panel->posL = WMCreateLabel(panel->navF); - WMResizeWidget(panel->posL, 140, 30); - WMMoveWidget(panel->posL, 75, 165); - WMSetLabelTextAlignment(panel->posL, WARight); - WMSetLabelText(panel->posL, - _("Position of workspace\nname display")); - - panel->posiL = WMCreateLabel(panel->navF); - WMResizeWidget(panel->posiL, 60, 40); - WMMoveWidget(panel->posiL, 10, 160); - WMSetLabelImagePosition(panel->posiL, WIPImageOnly); - path = LocateImage(WSNAME_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, NULL); - if (icon1) { - WMSetLabelImage(panel->posiL, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - - panel->posP = WMCreatePopUpButton(panel->navF); - WMResizeWidget(panel->posP, 125, 20); - WMMoveWidget(panel->posP, 225, 175); - WMAddPopUpButtonItem(panel->posP, _("Disable")); - WMAddPopUpButtonItem(panel->posP, _("Center")); - WMAddPopUpButtonItem(panel->posP, _("Top")); - WMAddPopUpButtonItem(panel->posP, _("Bottom")); - WMAddPopUpButtonItem(panel->posP, _("Top/Left")); - WMAddPopUpButtonItem(panel->posP, _("Top/Right")); - WMAddPopUpButtonItem(panel->posP, _("Bottom/Left")); - WMAddPopUpButtonItem(panel->posP, _("Bottom/Right")); - - WMMapSubwidgets(panel->navF); - - /***************** Dock/Clip *****************/ - panel->dockF = WMCreateFrame(panel->box); - WMResizeWidget(panel->dockF, 115, 210); - WMMoveWidget(panel->dockF, 390, 10); - WMSetFrameTitle(panel->dockF, _("Dock/Clip")); - - panel->dockB = WMCreateButton(panel->dockF, WBTToggle); - WMResizeWidget(panel->dockB, 64, 64); - WMMoveWidget(panel->dockB, 25, 35); - WMSetButtonImagePosition(panel->dockB, WIPImageOnly); - path = LocateImage(DOCK_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, &icon2); - if (icon2) { - WMSetButtonImage(panel->dockB, icon2); - WMReleasePixmap(icon2); - } - if (icon1) { - WMSetButtonAltImage(panel->dockB, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - WMSetBalloonTextForView(_("Disable/enable the application Dock (the\n" - "vertical icon bar in the side of the screen)."), - WMWidgetView(panel->dockB)); - - panel->clipB = WMCreateButton(panel->dockF, WBTToggle); - WMResizeWidget(panel->clipB, 64, 64); - WMMoveWidget(panel->clipB, 25, 120); - WMSetButtonImagePosition(panel->clipB, WIPImageOnly); - path = LocateImage(CLIP_FILE); - if (path) { - createImages(scr, rc, xis, path, &icon1, &icon2); - if (icon2) { - WMSetButtonImage(panel->clipB, icon2); - WMReleasePixmap(icon2); - } - if (icon1) { - WMSetButtonAltImage(panel->clipB, icon1); - WMReleasePixmap(icon1); - } - wfree(path); - } - WMSetBalloonTextForView(_("Disable/enable the Clip (that thing with\n" - "a paper clip icon)."), - WMWidgetView(panel->clipB)); - - WMMapSubwidgets(panel->dockF); - - if (xis) - RReleaseImage(xis); - - WMRealizeWidget(panel->box); - WMMapSubwidgets(panel->box); - - showData(panel); -} - - -static void -storeData(_Panel *panel) -{ - SetBoolForKey(!WMGetButtonSelected(panel->linkB), "DontLinkWorkspaces"); - SetBoolForKey(WMGetButtonSelected(panel->cyclB), "CycleWorkspaces"); - SetBoolForKey(WMGetButtonSelected(panel->newB), "AdvanceToNewWorkspace"); - - SetBoolForKey(!WMGetButtonSelected(panel->dockB), "DisableDock"); - SetBoolForKey(!WMGetButtonSelected(panel->clipB), "DisableClip"); - - SetStringForKey(WSNamePositions[WMGetPopUpButtonSelectedItem(panel->posP)], - "WorkspaceNameDisplayPosition"); -} - - - -Panel* -InitWorkspace(WMScreen *scr, WMWidget *parent) -{ - _Panel *panel; - - panel = wmalloc(sizeof(_Panel)); - memset(panel, 0, sizeof(_Panel)); - - panel->sectionName = _("Workspace Preferences"); - - panel->description = _("Workspace navigation features.\n" - "You can also enable/disable the Dock and Clip here."); - - panel->parent = parent; - - panel->callbacks.createWidgets = createPanel; - panel->callbacks.updateDomain = storeData; - - AddSection(panel, ICON_FILE); - - return panel; -} - +/* Workspace.c- workspace options + * + * WPrefs - Window Maker Preferences Program + * + * Copyright (c) 1998-2003 Alfredo K. Kojima + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "WPrefs.h" + +typedef struct _Panel { + WMBox *box; + + char *sectionName; + + char *description; + + CallbackRec callbacks; + + WMWidget *parent; + + WMFrame *navF; + + WMButton *linkB; + WMButton *cyclB; + WMButton *newB; + WMLabel *linkL; + WMLabel *cyclL; + WMLabel *newL; + + WMLabel *posiL; + WMLabel *posL; + WMPopUpButton *posP; + + WMFrame *dockF; + WMButton *dockB; + WMButton *clipB; +} _Panel; + +#define ICON_FILE "workspace" + +#define ARQUIVO_XIS "xis" +#define DONT_LINK_FILE "dontlinkworkspaces" +#define CYCLE_FILE "cycleworkspaces" +#define ADVANCE_FILE "advancetonewworkspace" +#define WSNAME_FILE "workspacename" +#define DOCK_FILE "dock" +#define CLIP_FILE "clip" + +static char *WSNamePositions[] = { + "none", + "center", + "top", + "bottom", + "topleft", + "topright", + "bottomleft", + "bottomright" +}; + +static void +createImages(WMScreen * scr, RContext * rc, RImage * xis, char *file, WMPixmap ** icon1, WMPixmap ** icon2) +{ + RImage *icon; + RColor gray = { 0xae, 0xaa, 0xae }; + + *icon1 = WMCreatePixmapFromFile(scr, file); + if (!*icon1) { + wwarning(_("could not load icon %s"), file); + if (icon2) + *icon2 = NULL; + return; + } + + if (!icon2) + return; + + icon = RLoadImage(rc, file, 0); + if (!icon) { + wwarning(_("could not load icon %s"), file); + *icon2 = NULL; + return; + } + RCombineImageWithColor(icon, &gray); + if (xis) { + RCombineImagesWithOpaqueness(icon, xis, 180); + if (!(*icon2 = WMCreatePixmapFromRImage(scr, icon, 127))) { + wwarning(_("could not process icon %s:"), file, RMessageForError(RErrorCode)); + *icon2 = NULL; + } + } + RReleaseImage(icon); +} + +static void showData(_Panel * panel) +{ + int i, idx; + char *str; + + WMSetButtonSelected(panel->linkB, !GetBoolForKey("DontLinkWorkspaces")); + + WMSetButtonSelected(panel->cyclB, GetBoolForKey("CycleWorkspaces")); + + WMSetButtonSelected(panel->newB, GetBoolForKey("AdvanceToNewWorkspace")); + + WMSetButtonSelected(panel->dockB, !GetBoolForKey("DisableDock")); + + WMSetButtonSelected(panel->clipB, !GetBoolForKey("DisableClip")); + + str = GetStringForKey("WorkspaceNameDisplayPosition"); + if (!str) + str = "center"; + + idx = 1; /* center */ + for (i = 0; i < sizeof(WSNamePositions) / sizeof(char *); i++) { + if (strcasecmp(WSNamePositions[i], str) == 0) { + idx = i; + break; + } + } + WMSetPopUpButtonSelectedItem(panel->posP, idx); +} + +static void createPanel(Panel * p) +{ + _Panel *panel = (_Panel *) p; + WMScreen *scr = WMWidgetScreen(panel->parent); + WMPixmap *icon1, *icon2; + RImage *xis = NULL; + RContext *rc = WMScreenRContext(scr); + char *path; + + path = LocateImage(ARQUIVO_XIS); + if (path) { + xis = RLoadImage(rc, path, 0); + if (!xis) { + wwarning(_("could not load image file %s"), path); + } + wfree(path); + } + + panel->box = WMCreateBox(panel->parent); + WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2); + + /***************** Workspace Navigation *****************/ + panel->navF = WMCreateFrame(panel->box); + WMResizeWidget(panel->navF, 365, 210); + WMMoveWidget(panel->navF, 15, 10); + WMSetFrameTitle(panel->navF, _("Workspace Navigation")); + + panel->cyclB = WMCreateSwitchButton(panel->navF); + WMResizeWidget(panel->cyclB, 280, 34); + WMMoveWidget(panel->cyclB, 75, 30); + WMSetButtonText(panel->cyclB, _("Wrap to the first workspace from the last workspace.")); + + panel->cyclL = WMCreateLabel(panel->navF); + WMResizeWidget(panel->cyclL, 60, 60); + WMMoveWidget(panel->cyclL, 10, 15); + WMSetLabelImagePosition(panel->cyclL, WIPImageOnly); + path = LocateImage(CYCLE_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, NULL); + if (icon1) { + WMSetLabelImage(panel->cyclL, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + + /**/ panel->linkB = WMCreateSwitchButton(panel->navF); + WMResizeWidget(panel->linkB, 280, 34); + WMMoveWidget(panel->linkB, 75, 75); + WMSetButtonText(panel->linkB, _("Switch workspaces while dragging windows.")); + + panel->linkL = WMCreateLabel(panel->navF); + WMResizeWidget(panel->linkL, 60, 40); + WMMoveWidget(panel->linkL, 10, 80); + WMSetLabelImagePosition(panel->linkL, WIPImageOnly); + path = LocateImage(DONT_LINK_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, NULL); + if (icon1) { + WMSetLabelImage(panel->linkL, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + + /**/ panel->newB = WMCreateSwitchButton(panel->navF); + WMResizeWidget(panel->newB, 280, 34); + WMMoveWidget(panel->newB, 75, 120); + WMSetButtonText(panel->newB, _("Automatically create new workspaces.")); + + panel->newL = WMCreateLabel(panel->navF); + WMResizeWidget(panel->newL, 60, 20); + WMMoveWidget(panel->newL, 10, 130); + WMSetLabelImagePosition(panel->newL, WIPImageOnly); + path = LocateImage(ADVANCE_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, NULL); + if (icon1) { + WMSetLabelImage(panel->newL, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + + /**/ panel->posL = WMCreateLabel(panel->navF); + WMResizeWidget(panel->posL, 140, 30); + WMMoveWidget(panel->posL, 75, 165); + WMSetLabelTextAlignment(panel->posL, WARight); + WMSetLabelText(panel->posL, _("Position of workspace\nname display")); + + panel->posiL = WMCreateLabel(panel->navF); + WMResizeWidget(panel->posiL, 60, 40); + WMMoveWidget(panel->posiL, 10, 160); + WMSetLabelImagePosition(panel->posiL, WIPImageOnly); + path = LocateImage(WSNAME_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, NULL); + if (icon1) { + WMSetLabelImage(panel->posiL, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + + panel->posP = WMCreatePopUpButton(panel->navF); + WMResizeWidget(panel->posP, 125, 20); + WMMoveWidget(panel->posP, 225, 175); + WMAddPopUpButtonItem(panel->posP, _("Disable")); + WMAddPopUpButtonItem(panel->posP, _("Center")); + WMAddPopUpButtonItem(panel->posP, _("Top")); + WMAddPopUpButtonItem(panel->posP, _("Bottom")); + WMAddPopUpButtonItem(panel->posP, _("Top/Left")); + WMAddPopUpButtonItem(panel->posP, _("Top/Right")); + WMAddPopUpButtonItem(panel->posP, _("Bottom/Left")); + WMAddPopUpButtonItem(panel->posP, _("Bottom/Right")); + + WMMapSubwidgets(panel->navF); + + /***************** Dock/Clip *****************/ + panel->dockF = WMCreateFrame(panel->box); + WMResizeWidget(panel->dockF, 115, 210); + WMMoveWidget(panel->dockF, 390, 10); + WMSetFrameTitle(panel->dockF, _("Dock/Clip")); + + panel->dockB = WMCreateButton(panel->dockF, WBTToggle); + WMResizeWidget(panel->dockB, 64, 64); + WMMoveWidget(panel->dockB, 25, 35); + WMSetButtonImagePosition(panel->dockB, WIPImageOnly); + path = LocateImage(DOCK_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, &icon2); + if (icon2) { + WMSetButtonImage(panel->dockB, icon2); + WMReleasePixmap(icon2); + } + if (icon1) { + WMSetButtonAltImage(panel->dockB, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + WMSetBalloonTextForView(_("Disable/enable the application Dock (the\n" + "vertical icon bar in the side of the screen)."), WMWidgetView(panel->dockB)); + + panel->clipB = WMCreateButton(panel->dockF, WBTToggle); + WMResizeWidget(panel->clipB, 64, 64); + WMMoveWidget(panel->clipB, 25, 120); + WMSetButtonImagePosition(panel->clipB, WIPImageOnly); + path = LocateImage(CLIP_FILE); + if (path) { + createImages(scr, rc, xis, path, &icon1, &icon2); + if (icon2) { + WMSetButtonImage(panel->clipB, icon2); + WMReleasePixmap(icon2); + } + if (icon1) { + WMSetButtonAltImage(panel->clipB, icon1); + WMReleasePixmap(icon1); + } + wfree(path); + } + WMSetBalloonTextForView(_("Disable/enable the Clip (that thing with\n" + "a paper clip icon)."), WMWidgetView(panel->clipB)); + + WMMapSubwidgets(panel->dockF); + + if (xis) + RReleaseImage(xis); + + WMRealizeWidget(panel->box); + WMMapSubwidgets(panel->box); + + showData(panel); +} + +static void storeData(_Panel * panel) +{ + SetBoolForKey(!WMGetButtonSelected(panel->linkB), "DontLinkWorkspaces"); + SetBoolForKey(WMGetButtonSelected(panel->cyclB), "CycleWorkspaces"); + SetBoolForKey(WMGetButtonSelected(panel->newB), "AdvanceToNewWorkspace"); + + SetBoolForKey(!WMGetButtonSelected(panel->dockB), "DisableDock"); + SetBoolForKey(!WMGetButtonSelected(panel->clipB), "DisableClip"); + + SetStringForKey(WSNamePositions[WMGetPopUpButtonSelectedItem(panel->posP)], + "WorkspaceNameDisplayPosition"); +} + +Panel *InitWorkspace(WMScreen * scr, WMWidget * parent) +{ + _Panel *panel; + + panel = wmalloc(sizeof(_Panel)); + memset(panel, 0, sizeof(_Panel)); + + panel->sectionName = _("Workspace Preferences"); + + panel->description = _("Workspace navigation features.\n" + "You can also enable/disable the Dock and Clip here."); + + panel->parent = parent; + + panel->callbacks.createWidgets = createPanel; + panel->callbacks.updateDomain = storeData; + + AddSection(panel, ICON_FILE); + + return panel; +}