mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
MenuStyle option
This commit is contained in:
@@ -3,7 +3,7 @@ Changes since version 0.52.0:
|
||||
|
||||
- patched wmsetbg to work with dynamically loadable texture renderer code
|
||||
- added libwmfun to distribution (forgot to do so in 0.52.0)
|
||||
- added alternative menu style option
|
||||
- added MenuStyle option
|
||||
- changed configuration updating to use notifications
|
||||
- fixed window move through workspaces in nonopaquemove
|
||||
- added message to immediately reread configuration data
|
||||
|
||||
13
NEWS
13
NEWS
@@ -2,12 +2,21 @@
|
||||
NEWS for veteran Window Maker users
|
||||
-----------------------------------
|
||||
|
||||
--- 0.52.1
|
||||
--- 0.53.0
|
||||
|
||||
New Option
|
||||
----------
|
||||
|
||||
AlternativeMenuStyle=YES; will make textures in menus to be unsegmented.
|
||||
MenuStyle=<style>; will change the menu texture style.
|
||||
|
||||
<style> can be:
|
||||
normal (default): for the traditional one texture per item, with bevels in
|
||||
each
|
||||
|
||||
singleTexture: for a single texture that spans the whole menu, with bevels
|
||||
in each item
|
||||
|
||||
flat: singleTexture without the bevels
|
||||
|
||||
|
||||
--- 0.52.0
|
||||
|
||||
@@ -1337,6 +1337,7 @@ WMSetColorPanelColor(WMColorPanel *panel, WMColor *color)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
updateSwatch(WMColorPanel *panel, RColor color)
|
||||
{
|
||||
WMScreen *scr = WMWidgetScreen(panel->win);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{
|
||||
WindozeCycling = YES;
|
||||
PopupSwitchMenu = NO;
|
||||
AlternativeMenuStyle = NO;
|
||||
DisableMiniwindows = NO;
|
||||
OpenTransientOnOwnerWorkspace = NO;
|
||||
|
||||
@@ -10,7 +10,7 @@ AC_INIT(src/WindowMaker.h)
|
||||
|
||||
|
||||
|
||||
AM_INIT_AUTOMAKE(WindowMaker, 0.52.0)
|
||||
AM_INIT_AUTOMAKE(WindowMaker, 0.53.0)
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
@@ -853,6 +853,9 @@ echo "JPEG support will not be included because the JPEG library is"
|
||||
echo "not installed correctly or was not found. Background images"
|
||||
echo "from themes will not display as they usually are JPEG files."
|
||||
echo
|
||||
echo "To fix, download and install the jpeg library and/or make sure you"
|
||||
echo "installed all jpeg related packages, like jpeg-devel."
|
||||
echo
|
||||
echo "WARNING WARNING WARNING WARNING WARNING WARNING WARNING"
|
||||
fi
|
||||
|
||||
|
||||
@@ -194,6 +194,12 @@ typedef enum {
|
||||
#define IY_LEFT 0
|
||||
|
||||
|
||||
/* menu styles */
|
||||
#define MS_NORMAL 0
|
||||
#define MS_SINGLE_TEXTURE 1
|
||||
#define MS_FLAT 2
|
||||
|
||||
|
||||
/* program states */
|
||||
#define WSTATE_NORMAL 0
|
||||
#define WSTATE_NEED_EXIT 1
|
||||
@@ -314,7 +320,6 @@ typedef struct WPreferences {
|
||||
|
||||
char auto_focus; /* focus window when it's mapped */
|
||||
|
||||
char alt_menu_style;
|
||||
|
||||
char *icon_back_file; /* background image for icons */
|
||||
|
||||
@@ -332,6 +337,8 @@ typedef struct WPreferences {
|
||||
|
||||
int icon_size; /* size of the icon */
|
||||
|
||||
int menu_style; /* menu decoration style */
|
||||
|
||||
char ws_advance; /* Create new workspace and advance */
|
||||
|
||||
char ws_cycle; /* Cycle existing workspaces */
|
||||
|
||||
@@ -347,22 +347,6 @@ updateDockNumbers(WScreen *scr)
|
||||
}
|
||||
#endif /* WS_INDICATOR */
|
||||
|
||||
#ifdef HIDDENDOT
|
||||
static void
|
||||
draw_dot(WScreen *scr, Drawable d)
|
||||
{
|
||||
GC gc;
|
||||
int y;
|
||||
gc = scr->draw_gc;
|
||||
y = wPreferences.icon_size-6;
|
||||
XSetForeground(dpy, gc, scr->black_pixel);
|
||||
XDrawLine(dpy, d, gc, 4, y, 5, y);
|
||||
XDrawPoint(dpy, d, gc, 4, y+1);
|
||||
XSetForeground(dpy, gc, scr->white_pixel);
|
||||
XDrawLine(dpy, d, gc, 6, y, 6, y+1);
|
||||
XDrawPoint(dpy, d, gc, 5, y+1);
|
||||
}
|
||||
#endif /* HIDDENDOT */
|
||||
|
||||
void
|
||||
wAppIconPaint(WAppIcon *aicon)
|
||||
|
||||
@@ -316,6 +316,7 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event)
|
||||
switch (event->atom) {
|
||||
case XA_WM_NAME:
|
||||
/* window title was changed */
|
||||
wwin->flags.wm_name_changed = 1;
|
||||
if (wwin->frame) {
|
||||
if (!wFetchName(dpy, wwin->client_win, &tmp)) {
|
||||
/* the hint was removed */
|
||||
|
||||
@@ -112,7 +112,6 @@ typedef struct {
|
||||
} WOptionEnumeration;
|
||||
|
||||
|
||||
|
||||
/* type converters */
|
||||
static int getBool();
|
||||
static int getInt();
|
||||
@@ -134,6 +133,7 @@ static int getModMask();
|
||||
static int getRImage();
|
||||
#endif
|
||||
|
||||
|
||||
/* value setting functions */
|
||||
static int setJustify();
|
||||
static int setIfDockPresent();
|
||||
@@ -170,7 +170,7 @@ static int setIconPosition();
|
||||
static int setClipTitleFont();
|
||||
static int setClipTitleColor();
|
||||
|
||||
static int setNothing();
|
||||
static int setMenuStyle();
|
||||
|
||||
|
||||
static int updateUsableArea();
|
||||
@@ -286,10 +286,16 @@ static WOptionEnumeration seIconPositions[] = {
|
||||
{NULL, 0, 0}
|
||||
};
|
||||
|
||||
static WOptionEnumeration seMenuStyles[] = {
|
||||
{"normal", MS_NORMAL, 0},
|
||||
{"singletexture", MS_SINGLE_TEXTURE, 0},
|
||||
{"flat", MS_FLAT, 0},
|
||||
{NULL, 0, 0}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* All entries in the tables bellow, NEED to have a default value
|
||||
* ALL entries in the tables bellow, NEED to have a default value
|
||||
* defined, and this value needs to be correct.
|
||||
*/
|
||||
|
||||
@@ -475,8 +481,8 @@ WDefaultEntry optionList[] = {
|
||||
},
|
||||
#endif /* WEENDOZE_CYCLE */
|
||||
/* style options */
|
||||
{"AlternativeMenuStyle", "NO", (void*)REFRESH_MENU_TEXTURE,
|
||||
&wPreferences.alt_menu_style, getBool, setNothing
|
||||
{"MenuStyle", "normal", seMenuStyles,
|
||||
&wPreferences.menu_style, getEnum, setMenuStyle
|
||||
},
|
||||
{"WidgetColor", "(solid, gray)", NULL,
|
||||
NULL, getTexture, setWidgetColor,
|
||||
@@ -2200,7 +2206,7 @@ static int
|
||||
getModMask(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr,
|
||||
void **ret)
|
||||
{
|
||||
unsigned int mask;
|
||||
static unsigned int mask;
|
||||
char *str;
|
||||
|
||||
STRINGP("Modifier Key");
|
||||
@@ -2323,8 +2329,8 @@ setIconTile(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo)
|
||||
int reset = 0;
|
||||
|
||||
img = wTextureRenderImage(*texture, wPreferences.icon_size,
|
||||
wPreferences.icon_size,
|
||||
((*texture)->any.type & WREL_BORDER_MASK)
|
||||
wPreferences.icon_size,
|
||||
((*texture)->any.type & WREL_BORDER_MASK)
|
||||
? WREL_ICON : WREL_FLAT);
|
||||
if (!img) {
|
||||
wwarning(_("could not render texture for icon background"));
|
||||
@@ -2927,9 +2933,9 @@ updateUsableArea(WScreen *scr, WDefaultEntry *entry, void *bar, void *foo)
|
||||
|
||||
|
||||
static int
|
||||
setNothing(WScreen *scr, WDefaultEntry *entry, int *value, void *foo)
|
||||
setMenuStyle(WScreen *scr, WDefaultEntry *entry, int *value, void *foo)
|
||||
{
|
||||
return (int)entry->extra_data;
|
||||
return REFRESH_MENU_TEXTURE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1338,7 +1338,7 @@ doWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
|
||||
if (!wwin)
|
||||
return;
|
||||
|
||||
puts("IN");
|
||||
/* puts("IN");*/
|
||||
keymap = XGetModifierMapping(dpy);
|
||||
|
||||
|
||||
@@ -1374,7 +1374,7 @@ doWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
|
||||
WMHandleEvent(&ev);
|
||||
continue;
|
||||
}
|
||||
puts("EV");
|
||||
/*puts("EV");*/
|
||||
/* ignore CapsLock */
|
||||
modifiers = ev.xkey.state & ValidModMask;
|
||||
|
||||
@@ -1415,14 +1415,14 @@ puts("EV");
|
||||
}
|
||||
}
|
||||
}
|
||||
puts("OUT");
|
||||
/*puts("OUT");*/
|
||||
XFree(keymap);
|
||||
|
||||
XUngrabKeyboard(dpy, CurrentTime);
|
||||
wSetFocusTo(scr, newFocused);
|
||||
scr->flags.doing_alt_tab = 0;
|
||||
if (openedSwitchMenu)
|
||||
OpenSwitchMenu(scr, scr->scr_width/2, scr->scr_height/2, False);
|
||||
OpenSwitchMenu(scr, scr->scr_width/2, scr->scr_height/2, False);
|
||||
}
|
||||
|
||||
|
||||
|
||||
138
src/menu.c
138
src/menu.c
@@ -437,6 +437,63 @@ wMenuRemoveItem(WMenu *menu, int index)
|
||||
}
|
||||
|
||||
|
||||
static Pixmap
|
||||
renderTexture(WMenu *menu)
|
||||
{
|
||||
RImage *img;
|
||||
Pixmap pix;
|
||||
int i;
|
||||
RColor light;
|
||||
RColor dark;
|
||||
RColor mid;
|
||||
WScreen *scr = menu->menu->screen_ptr;
|
||||
WTexture *texture = scr->menu_item_texture;
|
||||
|
||||
if (wPreferences.menu_style == MS_NORMAL) {
|
||||
img = wTextureRenderImage(texture, menu->menu->width,
|
||||
menu->entry_height, WREL_MENUENTRY);
|
||||
} else {
|
||||
img = wTextureRenderImage(texture, menu->menu->width,
|
||||
menu->menu->height+1, WREL_MENUENTRY);
|
||||
}
|
||||
if (!img) {
|
||||
wwarning(_("could not render texture: %s"),
|
||||
RMessageForError(RErrorCode));
|
||||
|
||||
return None;
|
||||
}
|
||||
|
||||
if (wPreferences.menu_style == MS_SINGLE_TEXTURE) {
|
||||
light.alpha = 0;
|
||||
light.red = light.green = light.blue = 80;
|
||||
|
||||
dark.alpha = 255;
|
||||
dark.red = dark.green = dark.blue = 0;
|
||||
|
||||
mid.alpha = 0;
|
||||
mid.red = mid.green = mid.blue = 40;
|
||||
|
||||
for (i = 1; i < menu->entry_no; i++) {
|
||||
ROperateLine(img, RSubtractOperation, 0, i*menu->entry_height-2,
|
||||
menu->menu->width-1, i*menu->entry_height-2, &mid);
|
||||
|
||||
RDrawLine(img, 0, i*menu->entry_height-1,
|
||||
menu->menu->width-1, i*menu->entry_height-1, &dark);
|
||||
|
||||
ROperateLine(img, RAddOperation, 0, i*menu->entry_height,
|
||||
menu->menu->width-1, i*menu->entry_height,
|
||||
&light);
|
||||
}
|
||||
}
|
||||
if (!RConvertImage(scr->rcontext, img, &pix)) {
|
||||
wwarning(_("error rendering image:%s"), RMessageForError(RErrorCode));
|
||||
}
|
||||
RDestroyImage(img);
|
||||
|
||||
return pix;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
updateTexture(WMenu *menu)
|
||||
{
|
||||
@@ -447,15 +504,7 @@ updateTexture(WMenu *menu)
|
||||
if (!menu->flags.brother) {
|
||||
FREE_PIXMAP(menu->menu_texture_data);
|
||||
|
||||
if (wPreferences.alt_menu_style) {
|
||||
wTextureRender(scr, scr->menu_item_texture,
|
||||
&menu->menu_texture_data, menu->menu->width,
|
||||
menu->menu->height, WREL_MENUENTRY);
|
||||
} else {
|
||||
wTextureRender(scr, scr->menu_item_texture,
|
||||
&menu->menu_texture_data, menu->menu->width,
|
||||
menu->entry_height, WREL_MENUENTRY);
|
||||
}
|
||||
menu->menu_texture_data = renderTexture(menu);
|
||||
|
||||
XSetWindowBackgroundPixmap(dpy, menu->menu->window,
|
||||
menu->menu_texture_data);
|
||||
@@ -629,31 +678,48 @@ wMenuDestroy(WMenu *menu, int recurse)
|
||||
}
|
||||
|
||||
|
||||
#define F_NORMAL 0
|
||||
#define F_TOP 1
|
||||
#define F_BOTTOM 2
|
||||
#define F_NONE 3
|
||||
|
||||
static void
|
||||
drawFrame(WScreen *scr, Window win, int y, int w, int h)
|
||||
drawFrame(WScreen *scr, Window win, int y, int w, int h, int type)
|
||||
{
|
||||
XSegment segs[2];
|
||||
int i;
|
||||
|
||||
segs[0].x1 = 0;
|
||||
segs[0].y1 = y;
|
||||
segs[0].x2 = w-1;
|
||||
segs[0].y2 = y;
|
||||
segs[1].x1 = 0;
|
||||
segs[1].y1 = y;
|
||||
segs[1].x2 = 0;
|
||||
segs[1].y2 = y + h - 2;
|
||||
XDrawSegments(dpy, win, scr->menu_item_auxtexture->light_gc, segs, 2);
|
||||
i = 0;
|
||||
segs[i].x1 = segs[i].x2 = w-1;
|
||||
segs[i].y1 = y;
|
||||
segs[i].y2 = y + h - 1;
|
||||
i++;
|
||||
if (type != F_TOP && type != F_NONE) {
|
||||
segs[i].x1 = 1;
|
||||
segs[i].y1 = segs[i].y2 = y + h-2;
|
||||
segs[i].x2 = w-1;
|
||||
i++;
|
||||
}
|
||||
XDrawSegments(dpy, win, scr->menu_item_auxtexture->dim_gc, segs, i);
|
||||
|
||||
XDrawLine(dpy, win, scr->menu_item_auxtexture->dark_gc, 0, y+h-1,
|
||||
w-1, y+h-1);
|
||||
i = 0;
|
||||
segs[i].x1 = 0;
|
||||
segs[i].y1 = y;
|
||||
segs[i].x2 = 0;
|
||||
segs[i].y2 = y + h - 1;
|
||||
i++;
|
||||
if (type != F_BOTTOM && type != F_NONE) {
|
||||
segs[i].x1 = 0;
|
||||
segs[i].y1 = y;
|
||||
segs[i].x2 = w-1;
|
||||
segs[i].y2 = y;
|
||||
i++;
|
||||
}
|
||||
XDrawSegments(dpy, win, scr->menu_item_auxtexture->light_gc, segs, i);
|
||||
|
||||
segs[0].x1 = 1;
|
||||
segs[0].y1 = segs[0].y2 = y + h-2;
|
||||
segs[0].x2 = w-1;
|
||||
segs[1].x1 = segs[1].x2 = w-1;
|
||||
segs[1].y1 = y + 1;
|
||||
segs[1].y2 = y + h-2;
|
||||
XDrawSegments(dpy, win, scr->menu_item_auxtexture->dim_gc, segs, 2);
|
||||
if (type != F_TOP && type != F_NONE)
|
||||
XDrawLine(dpy, win, scr->menu_item_auxtexture->dark_gc, 0, y+h-1,
|
||||
w-1, y+h-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -661,6 +727,7 @@ static void
|
||||
paintEntry(WMenu *menu, int index, int selected)
|
||||
{
|
||||
int x, y, w, h, tw;
|
||||
int type;
|
||||
GC light, dim, dark, textGC;
|
||||
WScreen *scr=menu->frame->screen_ptr;
|
||||
Window win = menu->menu->window;
|
||||
@@ -675,17 +742,28 @@ paintEntry(WMenu *menu, int index, int selected)
|
||||
dim = scr->menu_item_auxtexture->dim_gc;
|
||||
dark = scr->menu_item_auxtexture->dark_gc;
|
||||
|
||||
if (wPreferences.menu_style == MS_FLAT && menu->entry_no > 1) {
|
||||
if (index == 0)
|
||||
type = F_TOP;
|
||||
else if (index == menu->entry_no - 1)
|
||||
type = F_BOTTOM;
|
||||
else
|
||||
type = F_NONE;
|
||||
} else {
|
||||
type = F_NORMAL;
|
||||
}
|
||||
|
||||
/* paint background */
|
||||
if (selected) {
|
||||
XSetForeground(dpy, scr->select_menu_gc, scr->select_pixel);
|
||||
XFillRectangle(dpy, win, scr->select_menu_gc, 1, y+1, w-2, h-3);
|
||||
if (scr->menu_item_texture->any.type == WTEX_SOLID)
|
||||
drawFrame(scr, win, y, w, h);
|
||||
drawFrame(scr, win, y, w, h, type);
|
||||
} else {
|
||||
if (scr->menu_item_texture->any.type == WTEX_SOLID) {
|
||||
XClearArea(dpy, win, 0, y + 1, w - 1, h - 3, False);
|
||||
/* draw the frame */
|
||||
drawFrame(scr, win, y, w, h);
|
||||
drawFrame(scr, win, y, w, h, type);
|
||||
} else {
|
||||
XClearArea(dpy, win, 0, y, w, h, False);
|
||||
}
|
||||
|
||||
@@ -897,7 +897,10 @@ makeClientState(WWindow *wwin)
|
||||
appendStringInArray(state, wwin->wm_class);
|
||||
|
||||
/* WM_NAME */
|
||||
|
||||
if (wwin->flags.wm_name_changed)
|
||||
appendStringInArray(state, "");
|
||||
else
|
||||
appendStringInArray(state, wwin->frame->name);
|
||||
|
||||
/* geometry */
|
||||
sprintf(buffer, "%i %i %i %i %i %i", wwin->frame_x, wwin->frame_y,
|
||||
|
||||
@@ -427,7 +427,8 @@ wTextureMakeFunction(WScreen *scr, char *lib, char *func, int argc, char **argv)
|
||||
|
||||
|
||||
RImage*
|
||||
wTextureRenderImage(WTexture *texture, int width, int height, int relief)
|
||||
wTextureRenderImage(WTexture *texture, int width, int height,
|
||||
int relief)
|
||||
{
|
||||
RImage *image;
|
||||
RColor color1;
|
||||
@@ -598,31 +599,6 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief)
|
||||
}
|
||||
|
||||
|
||||
/* used only for menu entries */
|
||||
void
|
||||
wTextureRender(WScreen *scr, WTexture *texture, Pixmap *data,
|
||||
int width, int height, int relief)
|
||||
{
|
||||
if (!texture)
|
||||
return;
|
||||
/*
|
||||
switch (texture->any.type) {
|
||||
case WTEX_DGRADIENT:
|
||||
case WTEX_VGRADIENT:
|
||||
case WTEX_HGRADIENT:
|
||||
case WTEX_MHGRADIENT:
|
||||
case WTEX_MVGRADIENT:
|
||||
case WTEX_MDGRADIENT:
|
||||
case WTEX_PIXMAP:
|
||||
*/
|
||||
if (!*data) {
|
||||
*data = renderTexture(scr, width, height, texture, relief);
|
||||
}/*
|
||||
break;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
bevelImage(RImage *image, int relief)
|
||||
@@ -659,27 +635,6 @@ bevelImage(RImage *image, int relief)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static Pixmap
|
||||
renderTexture(WScreen *scr, int width, int height, WTexture *texture,
|
||||
int rel)
|
||||
{
|
||||
RImage *img;
|
||||
Pixmap pix;
|
||||
|
||||
img = wTextureRenderImage(texture, width, height, rel);
|
||||
|
||||
if (!img) {
|
||||
wwarning(_("could not render texture: %s"), RMessageForError(RErrorCode));
|
||||
return None;
|
||||
}
|
||||
if (!RConvertImage(scr->rcontext, img, &pix)) {
|
||||
wwarning(_("error rendering image:%s"), RMessageForError(RErrorCode));
|
||||
}
|
||||
RDestroyImage(img);
|
||||
return pix;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#ifdef USER_MENU
|
||||
/* User defined menu is good, but beer's always better
|
||||
* if someone wanna start hacking something, He heard...
|
||||
* TODO
|
||||
@@ -37,6 +36,8 @@
|
||||
|
||||
#include "wconfig.h"
|
||||
|
||||
#ifdef USER_MENU
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xproto.h>
|
||||
|
||||
@@ -156,10 +156,16 @@
|
||||
/*
|
||||
* disable/enable workspace indicator in the dock
|
||||
*/
|
||||
|
||||
#undef WS_INDICATOR
|
||||
|
||||
|
||||
/*
|
||||
* define USER_MENU if you want user specified menus for sending
|
||||
* commands to applications. Kinda experimental..
|
||||
*/
|
||||
#undef USER_MENU
|
||||
|
||||
|
||||
/*
|
||||
* define HIDDENDOT if you want a dot to be shown in the application icon
|
||||
* of applications that are hidden.
|
||||
|
||||
@@ -2542,7 +2542,8 @@ resizebarMouseDown(WCoreWindow *sender, void *data, XEvent *event)
|
||||
CloseWindowMenu(wwin->screen_ptr);
|
||||
|
||||
if (wPreferences.focus_mode==WKF_CLICK
|
||||
&& !(event->xbutton.state&ControlMask)) {
|
||||
&& !(event->xbutton.state&ControlMask)
|
||||
&& !WFLAGP(wwin, no_focusable)) {
|
||||
wSetFocusTo(wwin->screen_ptr, wwin);
|
||||
}
|
||||
|
||||
@@ -2629,7 +2630,8 @@ frameMouseDown(WObjDescriptor *desc, XEvent *event)
|
||||
CloseWindowMenu(wwin->screen_ptr);
|
||||
|
||||
if (wPreferences.focus_mode==WKF_CLICK
|
||||
&& !(event->xbutton.state&ControlMask)) {
|
||||
&& !(event->xbutton.state&ControlMask)
|
||||
&& !WFLAGP(wwin, no_focusable)) {
|
||||
wSetFocusTo(wwin->screen_ptr, wwin);
|
||||
}
|
||||
if (event->xbutton.button == Button1) {
|
||||
@@ -2673,7 +2675,8 @@ titlebarMouseDown(WCoreWindow *sender, void *data, XEvent *event)
|
||||
CloseWindowMenu(wwin->screen_ptr);
|
||||
|
||||
if (wPreferences.focus_mode==WKF_CLICK
|
||||
&& !(event->xbutton.state&ControlMask)) {
|
||||
&& !(event->xbutton.state&ControlMask)
|
||||
&& !WFLAGP(wwin, no_focusable)) {
|
||||
wSetFocusTo(wwin->screen_ptr, wwin);
|
||||
}
|
||||
|
||||
|
||||
@@ -271,6 +271,7 @@ typedef struct WWindow {
|
||||
|
||||
unsigned int user_changed_width:1;
|
||||
unsigned int user_changed_height:1;
|
||||
unsigned int wm_name_changed:1;
|
||||
|
||||
#ifdef KWM_HINTS
|
||||
unsigned int kwm_hidden_for_modules:1;
|
||||
|
||||
Reference in New Issue
Block a user