1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00

Add option to allow starting DockApps with a single click

This patch is from the contrib directory. It adds an option to allow starting
DockApps with a single click. It's a handy option that adds only a few lines to
the code.

It is a good feature patch example because it includes modifications
to the WPrefs application so that the feature can be easily enabled or
disabled. The one-click ability allows wmaker to integrate more seemlessly with
programs like ROX-Filer which can be configured to use single or double click
actions.

The README in the contrib/ directory says,

author:
Sebastien Bauer <seb_bauer@bigfoot.com>
John Morrissey <jwm@horde.net>

updated for Window Maker 0.65.0 by:
Daniel Richard G. <skunk@graphics.lcs.mit.edu>

updated for Window Maker 0.80.2 by:
Martial Daumas <martial@nasgaia.org>

update for 0.80.2+ by:
steve lion <steve.lion@verizon.net> and vlaad
This commit is contained in:
Sebastien Bauer
2009-09-03 04:08:58 +02:00
committed by Carlos R. Mafra
parent c04a2caeab
commit f8dd3dc49e
6 changed files with 26 additions and 6 deletions

View File

@@ -49,6 +49,7 @@ static void showData(_Panel * panel)
WMSetButtonSelected(panel->swi[4], GetBoolForKey("DontConfirmKill")); WMSetButtonSelected(panel->swi[4], GetBoolForKey("DontConfirmKill"));
WMSetButtonSelected(panel->swi[5], GetBoolForKey("DisableBlinking")); WMSetButtonSelected(panel->swi[5], GetBoolForKey("DisableBlinking"));
WMSetButtonSelected(panel->swi[6], GetBoolForKey("AntialiasedText")); WMSetButtonSelected(panel->swi[6], GetBoolForKey("AntialiasedText"));
WMSetButtonSelected(panel->swi[7], GetBoolForKey("SingleClickLaunch"));
} }
static void createPanel(Panel * p) static void createPanel(Panel * p)
@@ -59,7 +60,7 @@ static void createPanel(Panel * p)
panel->box = WMCreateBox(panel->parent); panel->box = WMCreateBox(panel->parent);
WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2); WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
for (i = 0; i < 7; i++) { for (i = 0; i < 8; i++) {
panel->swi[i] = WMCreateSwitchButton(panel->box); panel->swi[i] = WMCreateSwitchButton(panel->box);
WMResizeWidget(panel->swi[i], FRAME_WIDTH - 40, 25); WMResizeWidget(panel->swi[i], FRAME_WIDTH - 40, 25);
WMMoveWidget(panel->swi[i], 20, 20 + i * 25); WMMoveWidget(panel->swi[i], 20, 20 + i * 25);
@@ -73,6 +74,7 @@ static void createPanel(Panel * p)
WMSetButtonText(panel->swi[4], _("Disable confirmation panel for the Kill command.")); WMSetButtonText(panel->swi[4], _("Disable confirmation panel for the Kill command."));
WMSetButtonText(panel->swi[5], _("Disable selection animation for selected icons.")); WMSetButtonText(panel->swi[5], _("Disable selection animation for selected icons."));
WMSetButtonText(panel->swi[6], _("Smooth font edges (needs restart).")); WMSetButtonText(panel->swi[6], _("Smooth font edges (needs restart)."));
WMSetButtonText(panel->swi[7], _("Launch applications and restore windows with a single click."));
WMSetButtonEnabled(panel->swi[6], True); WMSetButtonEnabled(panel->swi[6], True);
@@ -95,6 +97,7 @@ static void storeDefaults(_Panel * panel)
SetBoolForKey(WMGetButtonSelected(panel->swi[4]), "DontConfirmKill"); SetBoolForKey(WMGetButtonSelected(panel->swi[4]), "DontConfirmKill");
SetBoolForKey(WMGetButtonSelected(panel->swi[5]), "DisableBlinking"); SetBoolForKey(WMGetButtonSelected(panel->swi[5]), "DisableBlinking");
SetBoolForKey(WMGetButtonSelected(panel->swi[6]), "AntialiasedText"); SetBoolForKey(WMGetButtonSelected(panel->swi[6]), "AntialiasedText");
SetBoolForKey(WMGetButtonSelected(panel->swi[7]), "SingleClickLaunch");
} }
Panel *InitExpert(WMScreen * scr, WMWidget * parent) Panel *InitExpert(WMScreen * scr, WMWidget * parent)

View File

@@ -471,6 +471,7 @@ typedef struct WPreferences {
unsigned int workspace_border_size; /* Size in pixels of the workspace border */ unsigned int workspace_border_size; /* Size in pixels of the workspace border */
char workspace_border_position; /* Where to leave a workspace border */ char workspace_border_position; /* Where to leave a workspace border */
char single_click; /* single click to lauch applications */
RImage *swtileImage; RImage *swtileImage;
RImage *swbackImage[9]; RImage *swbackImage[9];

View File

@@ -532,6 +532,7 @@ void appIconMouseDown(WObjDescriptor * desc, XEvent * event)
Bool movingSingle = False; Bool movingSingle = False;
int oldX = x; int oldX = x;
int oldY = y; int oldY = y;
Bool hasMoved = False;
if (aicon->editing || WCHECK_STATE(WSTATE_MODAL)) if (aicon->editing || WCHECK_STATE(WSTATE_MODAL))
return; return;
@@ -611,6 +612,7 @@ void appIconMouseDown(WObjDescriptor * desc, XEvent * event)
break; break;
case MotionNotify: case MotionNotify:
hasMoved = True;
if (!grabbed) { if (!grabbed) {
if (abs(dx - ev.xmotion.x) >= MOVE_THRESHOLD if (abs(dx - ev.xmotion.x) >= MOVE_THRESHOLD
|| abs(dy - ev.xmotion.y) >= MOVE_THRESHOLD) { || abs(dy - ev.xmotion.y) >= MOVE_THRESHOLD) {
@@ -745,6 +747,9 @@ void appIconMouseDown(WObjDescriptor * desc, XEvent * event)
if (wPreferences.auto_arrange_icons) if (wPreferences.auto_arrange_icons)
wArrangeIcons(scr, True); wArrangeIcons(scr, True);
if (wPreferences.single_click && !hasMoved)
iconDblClick(desc, event);
done = 1; done = 1;
break; break;
} }

View File

@@ -474,6 +474,8 @@ WDefaultEntry optionList[] = {
&wPreferences.attract, getBool, NULL}, &wPreferences.attract, getBool, NULL},
{"DisableBlinking", "NO", NULL, {"DisableBlinking", "NO", NULL,
&wPreferences.dont_blink, getBool, NULL}, &wPreferences.dont_blink, getBool, NULL},
{"SingleClickLaunch", "NO", NULL,
&wPreferences.single_click, getBool, NULL},
/* style options */ /* style options */
{"MenuStyle", "normal", seMenuStyles, {"MenuStyle", "normal", seMenuStyles,
&wPreferences.menu_style, getEnum, setMenuStyle}, &wPreferences.menu_style, getEnum, setMenuStyle},

View File

@@ -3501,7 +3501,7 @@ static void handleDockMove(WDock * dock, WAppIcon * aicon, XEvent * event)
#endif #endif
} }
static void handleIconMove(WDock * dock, WAppIcon * aicon, XEvent * event) static Bool handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event)
{ {
WScreen *scr = dock->screen_ptr; WScreen *scr = dock->screen_ptr;
Window wins[2]; Window wins[2];
@@ -3518,6 +3518,7 @@ static void handleIconMove(WDock * dock, WAppIcon * aicon, XEvent * event)
Bool docked; Bool docked;
int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */ int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */
int omnipresent = aicon->omnipresent; /* this must be cached!!! */ int omnipresent = aicon->omnipresent; /* this must be cached!!! */
Bool hasMoved = False;
if (wPreferences.flags.noupdates) if (wPreferences.flags.noupdates)
return; return;
@@ -3567,6 +3568,7 @@ static void handleIconMove(WDock * dock, WAppIcon * aicon, XEvent * event)
break; break;
case MotionNotify: case MotionNotify:
hasMoved = True;
if (!grabbed) { if (!grabbed) {
if (abs(ofs_x - ev.xmotion.x) >= MOVE_THRESHOLD if (abs(ofs_x - ev.xmotion.x) >= MOVE_THRESHOLD
|| abs(ofs_y - ev.xmotion.y) >= MOVE_THRESHOLD) { || abs(ofs_y - ev.xmotion.y) >= MOVE_THRESHOLD) {
@@ -3712,9 +3714,10 @@ static void handleIconMove(WDock * dock, WAppIcon * aicon, XEvent * event)
#ifdef DEBUG #ifdef DEBUG
puts("End icon move"); puts("End icon move");
#endif #endif
return; return hasMoved;;
} }
} }
return False; /* never reached */
} }
static int getClipButton(int px, int py) static int getClipButton(int px, int py)
@@ -3841,9 +3844,11 @@ static void iconMouseDown(WObjDescriptor * desc, XEvent * event)
handleClipChangeWorkspace(scr, event); handleClipChangeWorkspace(scr, event);
else else
handleDockMove(dock, aicon, event); handleDockMove(dock, aicon, event);
} else } else {
handleIconMove(dock, aicon, event); Bool hasMoved = handleIconMove(dock, aicon, event);
if (wPreferences.single_click && !hasMoved)
iconDblClick(desc, event);
}
} else if (event->xbutton.button == Button2 && dock->type == WM_CLIP && aicon == scr->clip_icon) { } else if (event->xbutton.button == Button2 && dock->type == WM_CLIP && aicon == scr->clip_icon) {
if (!scr->clip_ws_menu) { if (!scr->clip_ws_menu) {
scr->clip_ws_menu = wWorkspaceMenuMake(scr, False); scr->clip_ws_menu = wWorkspaceMenuMake(scr, False);

View File

@@ -814,6 +814,7 @@ static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event)
int dx = event->xbutton.x, dy = event->xbutton.y; int dx = event->xbutton.x, dy = event->xbutton.y;
int grabbed = 0; int grabbed = 0;
int clickButton = event->xbutton.button; int clickButton = event->xbutton.button;
Bool hasMoved = False;
if (WCHECK_STATE(WSTATE_MODAL)) if (WCHECK_STATE(WSTATE_MODAL))
return; return;
@@ -863,6 +864,7 @@ static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event)
break; break;
case MotionNotify: case MotionNotify:
hasMoved = True;
if (!grabbed) { if (!grabbed) {
if (abs(dx - ev.xmotion.x) >= MOVE_THRESHOLD if (abs(dx - ev.xmotion.x) >= MOVE_THRESHOLD
|| abs(dy - ev.xmotion.y) >= MOVE_THRESHOLD) { || abs(dy - ev.xmotion.y) >= MOVE_THRESHOLD) {
@@ -900,6 +902,8 @@ static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event)
if (wPreferences.auto_arrange_icons) if (wPreferences.auto_arrange_icons)
wArrangeIcons(wwin->screen_ptr, True); wArrangeIcons(wwin->screen_ptr, True);
if (wPreferences.single_click && !hasMoved)
miniwindowDblClick(desc, event);
return; return;
} }