mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 20:38:08 +01:00
added igradient texture
fixed some bugs
This commit is contained in:
@@ -405,7 +405,7 @@ WDefaultEntry optionList[] = {
|
|||||||
{"RaiseDelay", "0", NULL,
|
{"RaiseDelay", "0", NULL,
|
||||||
&wPreferences.raise_delay, getInt, NULL
|
&wPreferences.raise_delay, getInt, NULL
|
||||||
},
|
},
|
||||||
{"WindowsCycling", "YES", NULL,
|
{"WindozeCycling", "YES", NULL,
|
||||||
&wPreferences.windows_cycling,getBool, NULL
|
&wPreferences.windows_cycling,getBool, NULL
|
||||||
},
|
},
|
||||||
{"CirculateRaise", "NO", NULL,
|
{"CirculateRaise", "NO", NULL,
|
||||||
@@ -1701,6 +1701,8 @@ getEnum(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr,
|
|||||||
* (dgradient <color> <color>)
|
* (dgradient <color> <color>)
|
||||||
* (mhgradient <color> <color> ...)
|
* (mhgradient <color> <color> ...)
|
||||||
* (mvgradient <color> <color> ...)
|
* (mvgradient <color> <color> ...)
|
||||||
|
* (mdgradient <color> <color> ...)
|
||||||
|
* (igradient <color1> <color1> <thickness1> <color2> <color2> <thickness2>)
|
||||||
* (tpixmap <file> <color>)
|
* (tpixmap <file> <color>)
|
||||||
* (spixmap <file> <color>)
|
* (spixmap <file> <color>)
|
||||||
* (cpixmap <file> <color>)
|
* (cpixmap <file> <color>)
|
||||||
@@ -1800,7 +1802,66 @@ parse_texture(WScreen *scr, proplist_t pl)
|
|||||||
color2.blue = xcolor.blue >> 8;
|
color2.blue = xcolor.blue >> 8;
|
||||||
|
|
||||||
texture = (WTexture*)wTextureMakeGradient(scr, type, &color1, &color2);
|
texture = (WTexture*)wTextureMakeGradient(scr, type, &color1, &color2);
|
||||||
|
|
||||||
|
} else if (strcasecmp(val, "igradient")==0) {
|
||||||
|
RColor colors1[2], colors2[2];
|
||||||
|
int th1, th2;
|
||||||
|
XColor xcolor;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (nelem != 7) {
|
||||||
|
wwarning(_("bad number of arguments in gradient specification"));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get from color */
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
elem = PLGetArrayElement(pl, 1+i);
|
||||||
|
if (!elem || !PLIsString(elem))
|
||||||
|
return NULL;
|
||||||
|
val = PLGetString(elem);
|
||||||
|
|
||||||
|
if (!XParseColor(dpy, scr->w_colormap, val, &xcolor)) {
|
||||||
|
wwarning(_("\"%s\" is not a valid color name"), val);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
colors1[i].alpha = 255;
|
||||||
|
colors1[i].red = xcolor.red >> 8;
|
||||||
|
colors1[i].green = xcolor.green >> 8;
|
||||||
|
colors1[i].blue = xcolor.blue >> 8;
|
||||||
|
}
|
||||||
|
elem = PLGetArrayElement(pl, 3);
|
||||||
|
if (!elem || !PLIsString(elem))
|
||||||
|
return NULL;
|
||||||
|
val = PLGetString(elem);
|
||||||
|
th1 = atoi(val);
|
||||||
|
|
||||||
|
|
||||||
|
/* get from color */
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
elem = PLGetArrayElement(pl, 4+i);
|
||||||
|
if (!elem || !PLIsString(elem))
|
||||||
|
return NULL;
|
||||||
|
val = PLGetString(elem);
|
||||||
|
|
||||||
|
if (!XParseColor(dpy, scr->w_colormap, val, &xcolor)) {
|
||||||
|
wwarning(_("\"%s\" is not a valid color name"), val);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
colors2[i].alpha = 255;
|
||||||
|
colors2[i].red = xcolor.red >> 8;
|
||||||
|
colors2[i].green = xcolor.green >> 8;
|
||||||
|
colors2[i].blue = xcolor.blue >> 8;
|
||||||
|
}
|
||||||
|
elem = PLGetArrayElement(pl, 6);
|
||||||
|
if (!elem || !PLIsString(elem))
|
||||||
|
return NULL;
|
||||||
|
val = PLGetString(elem);
|
||||||
|
th2 = atoi(val);
|
||||||
|
|
||||||
|
texture = (WTexture*)wTextureMakeIGradient(scr, th1, colors1,
|
||||||
|
th2, colors2);
|
||||||
|
|
||||||
} else if (strcasecmp(val, "mhgradient")==0
|
} else if (strcasecmp(val, "mhgradient")==0
|
||||||
|| strcasecmp(val, "mvgradient")==0
|
|| strcasecmp(val, "mvgradient")==0
|
||||||
|| strcasecmp(val, "mdgradient")==0) {
|
|| strcasecmp(val, "mdgradient")==0) {
|
||||||
@@ -3208,7 +3269,7 @@ setWorkspaceBack(WScreen *scr, WDefaultEntry *entry, proplist_t value,
|
|||||||
SendHelperMessage(scr, 'U', 0, NULL);
|
SendHelperMessage(scr, 'U', 0, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (PLGetNumberOfElements(value) > 0) {
|
||||||
char *command;
|
char *command;
|
||||||
char *text;
|
char *text;
|
||||||
|
|
||||||
|
|||||||
@@ -500,7 +500,8 @@ wGNOMEProcessClientMessage(XClientMessageEvent *event)
|
|||||||
|
|
||||||
if (mask & WIN_STATE_STICKY) {
|
if (mask & WIN_STATE_STICKY) {
|
||||||
if ((flags & WIN_STATE_STICKY) != WFLAGP(wwin, omnipresent)) {
|
if ((flags & WIN_STATE_STICKY) != WFLAGP(wwin, omnipresent)) {
|
||||||
wwin->client_flags.omnipresent = 1;
|
wwin->client_flags.omnipresent = (flags & WIN_STATE_STICKY)!=0;
|
||||||
|
wGNOMEUpdateClientStateHint(wwin, False);
|
||||||
updateWindowList = True;
|
updateWindowList = True;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
src/menu.c
26
src/menu.c
@@ -972,13 +972,17 @@ keyboardMenu(WMenu *menu)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_Home:
|
case XK_Home:
|
||||||
|
#ifdef XK_KP_Home
|
||||||
case XK_KP_Home:
|
case XK_KP_Home:
|
||||||
|
#endif
|
||||||
selectEntry(menu, 0);
|
selectEntry(menu, 0);
|
||||||
makeVisible(menu);
|
makeVisible(menu);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_End:
|
case XK_End:
|
||||||
|
#ifdef XK_KP_End
|
||||||
case XK_KP_End:
|
case XK_KP_End:
|
||||||
|
#endif
|
||||||
selectEntry(menu, menu->entry_no-1);
|
selectEntry(menu, menu->entry_no-1);
|
||||||
makeVisible(menu);
|
makeVisible(menu);
|
||||||
break;
|
break;
|
||||||
@@ -987,7 +991,9 @@ keyboardMenu(WMenu *menu)
|
|||||||
#ifdef ARROWLESS_KBD
|
#ifdef ARROWLESS_KBD
|
||||||
case XK_k:
|
case XK_k:
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XK_KP_Up
|
||||||
case XK_KP_Up:
|
case XK_KP_Up:
|
||||||
|
#endif
|
||||||
if (menu->selected_entry <= 0)
|
if (menu->selected_entry <= 0)
|
||||||
selectEntry(menu, menu->entry_no-1);
|
selectEntry(menu, menu->entry_no-1);
|
||||||
else
|
else
|
||||||
@@ -999,7 +1005,9 @@ keyboardMenu(WMenu *menu)
|
|||||||
#ifdef ARROWLESS_KBD
|
#ifdef ARROWLESS_KBD
|
||||||
case XK_j:
|
case XK_j:
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XK_KP_Down
|
||||||
case XK_KP_Down:
|
case XK_KP_Down:
|
||||||
|
#endif
|
||||||
if (menu->selected_entry<0)
|
if (menu->selected_entry<0)
|
||||||
selectEntry(menu, 0);
|
selectEntry(menu, 0);
|
||||||
else if (menu->selected_entry == menu->entry_no-1)
|
else if (menu->selected_entry == menu->entry_no-1)
|
||||||
@@ -1013,7 +1021,9 @@ keyboardMenu(WMenu *menu)
|
|||||||
#ifdef ARROWLESS_KBD
|
#ifdef ARROWLESS_KBD
|
||||||
case XK_l:
|
case XK_l:
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XK_KP_Right
|
||||||
case XK_KP_Right:
|
case XK_KP_Right:
|
||||||
|
#endif
|
||||||
if (menu->selected_entry>=0) {
|
if (menu->selected_entry>=0) {
|
||||||
WMenuEntry *entry;
|
WMenuEntry *entry;
|
||||||
entry = menu->entries[menu->selected_entry];
|
entry = menu->entries[menu->selected_entry];
|
||||||
@@ -1038,7 +1048,9 @@ keyboardMenu(WMenu *menu)
|
|||||||
#ifdef ARROWLESS_KBD
|
#ifdef ARROWLESS_KBD
|
||||||
case XK_h:
|
case XK_h:
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef XK_KP_Left
|
||||||
case XK_KP_Left:
|
case XK_KP_Left:
|
||||||
|
#endif
|
||||||
if (menu->parent!=NULL && menu->parent->selected_entry>=0) {
|
if (menu->parent!=NULL && menu->parent->selected_entry>=0) {
|
||||||
selectEntry(menu, -1);
|
selectEntry(menu, -1);
|
||||||
move_menus(menu, old_pos_x, old_pos_y);
|
move_menus(menu, old_pos_x, old_pos_y);
|
||||||
@@ -1582,8 +1594,6 @@ wMenuUnderPointer(WScreen *screen)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define MIN(a,b) (((a) > (b)) ? (b) : (a))
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
getPointerPosition(WScreen *scr, int *x, int *y)
|
getPointerPosition(WScreen *scr, int *x, int *y)
|
||||||
@@ -1617,11 +1627,11 @@ getScrollAmount(WMenu *menu, int *hamount, int *vamount)
|
|||||||
if (wPreferences.vedge_thickness) {
|
if (wPreferences.vedge_thickness) {
|
||||||
if (xroot <= wPreferences.vedge_thickness + 1 && menuX1 < wPreferences.vedge_thickness) {
|
if (xroot <= wPreferences.vedge_thickness + 1 && menuX1 < wPreferences.vedge_thickness) {
|
||||||
/* scroll to the right */
|
/* scroll to the right */
|
||||||
*hamount = MIN(MENU_SCROLL_STEP, abs(menuX1));
|
*hamount = WMIN(MENU_SCROLL_STEP, abs(menuX1));
|
||||||
|
|
||||||
} else if (xroot >= screenW-2-wPreferences.vedge_thickness && menuX2 > screenW-1-wPreferences.vedge_thickness) {
|
} else if (xroot >= screenW-2-wPreferences.vedge_thickness && menuX2 > screenW-1-wPreferences.vedge_thickness) {
|
||||||
/* scroll to the left */
|
/* scroll to the left */
|
||||||
*hamount = MIN(MENU_SCROLL_STEP, abs(menuX2-screenW-1));
|
*hamount = WMIN(MENU_SCROLL_STEP, abs(menuX2-screenW-1));
|
||||||
|
|
||||||
if (*hamount==0)
|
if (*hamount==0)
|
||||||
*hamount = 1;
|
*hamount = 1;
|
||||||
@@ -1633,11 +1643,11 @@ getScrollAmount(WMenu *menu, int *hamount, int *vamount)
|
|||||||
|
|
||||||
if (xroot <= 1 && menuX1 < 0) {
|
if (xroot <= 1 && menuX1 < 0) {
|
||||||
/* scroll to the right */
|
/* scroll to the right */
|
||||||
*hamount = MIN(MENU_SCROLL_STEP, abs(menuX1));
|
*hamount = WMIN(MENU_SCROLL_STEP, abs(menuX1));
|
||||||
|
|
||||||
} else if (xroot >= screenW-2 && menuX2 > screenW-1) {
|
} else if (xroot >= screenW-2 && menuX2 > screenW-1) {
|
||||||
/* scroll to the left */
|
/* scroll to the left */
|
||||||
*hamount = MIN(MENU_SCROLL_STEP, abs(menuX2-screenW-1));
|
*hamount = WMIN(MENU_SCROLL_STEP, abs(menuX2-screenW-1));
|
||||||
|
|
||||||
if (*hamount==0)
|
if (*hamount==0)
|
||||||
*hamount = 1;
|
*hamount = 1;
|
||||||
@@ -1647,11 +1657,11 @@ getScrollAmount(WMenu *menu, int *hamount, int *vamount)
|
|||||||
|
|
||||||
if (yroot <= 1 && menuY1 < 0) {
|
if (yroot <= 1 && menuY1 < 0) {
|
||||||
/* scroll down */
|
/* scroll down */
|
||||||
*vamount = MIN(MENU_SCROLL_STEP, abs(menuY1));
|
*vamount = WMIN(MENU_SCROLL_STEP, abs(menuY1));
|
||||||
|
|
||||||
} else if (yroot >= screenH-2 && menuY2 > screenH-1) {
|
} else if (yroot >= screenH-2 && menuY2 > screenH-1) {
|
||||||
/* scroll up */
|
/* scroll up */
|
||||||
*vamount = MIN(MENU_SCROLL_STEP, abs(menuY2-screenH-2));
|
*vamount = WMIN(MENU_SCROLL_STEP, abs(menuY2-screenH-2));
|
||||||
|
|
||||||
*vamount = -*vamount;
|
*vamount = -*vamount;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1311,7 +1311,9 @@ wKeyboardMoveResizeWindow(WWindow *wwin)
|
|||||||
done=1;
|
done=1;
|
||||||
break;
|
break;
|
||||||
case XK_Up:
|
case XK_Up:
|
||||||
|
#ifdef XK_KP_Up
|
||||||
case XK_KP_Up:
|
case XK_KP_Up:
|
||||||
|
#endif
|
||||||
case XK_k:
|
case XK_k:
|
||||||
if (ctrlmode){
|
if (ctrlmode){
|
||||||
if (moment != UP)
|
if (moment != UP)
|
||||||
@@ -1323,7 +1325,9 @@ wKeyboardMoveResizeWindow(WWindow *wwin)
|
|||||||
else off_y-=kspeed;
|
else off_y-=kspeed;
|
||||||
break;
|
break;
|
||||||
case XK_Down:
|
case XK_Down:
|
||||||
|
#ifdef XK_KP_Down
|
||||||
case XK_KP_Down:
|
case XK_KP_Down:
|
||||||
|
#endif
|
||||||
case XK_j:
|
case XK_j:
|
||||||
if (ctrlmode){
|
if (ctrlmode){
|
||||||
if (moment != DOWN)
|
if (moment != DOWN)
|
||||||
@@ -1334,7 +1338,9 @@ wKeyboardMoveResizeWindow(WWindow *wwin)
|
|||||||
else off_y+=kspeed;
|
else off_y+=kspeed;
|
||||||
break;
|
break;
|
||||||
case XK_Left:
|
case XK_Left:
|
||||||
|
#ifdef XK_KP_Left
|
||||||
case XK_KP_Left:
|
case XK_KP_Left:
|
||||||
|
#endif
|
||||||
case XK_h:
|
case XK_h:
|
||||||
if (ctrlmode) {
|
if (ctrlmode) {
|
||||||
if (moment != LEFT)
|
if (moment != LEFT)
|
||||||
@@ -1346,7 +1352,9 @@ wKeyboardMoveResizeWindow(WWindow *wwin)
|
|||||||
else off_x-=kspeed;
|
else off_x-=kspeed;
|
||||||
break;
|
break;
|
||||||
case XK_Right:
|
case XK_Right:
|
||||||
|
#ifdef XK_KP_Right
|
||||||
case XK_KP_Right:
|
case XK_KP_Right:
|
||||||
|
#endif
|
||||||
case XK_l:
|
case XK_l:
|
||||||
if (ctrlmode) {
|
if (ctrlmode) {
|
||||||
if (moment != RIGHT)
|
if (moment != RIGHT)
|
||||||
|
|||||||
@@ -449,17 +449,12 @@ getWindowState(WScreen *scr, proplist_t win_state)
|
|||||||
|
|
||||||
value = PLGetDictionaryEntry(win_state, sGeometry);
|
value = PLGetDictionaryEntry(win_state, sGeometry);
|
||||||
if (value && PLIsString(value)) {
|
if (value && PLIsString(value)) {
|
||||||
if (sscanf(PLGetString(value), "%ix%i+%i+%i",
|
if (!(sscanf(PLGetString(value), "%ix%i+%i+%i",
|
||||||
&state->w, &state->h, &state->x, &state->y)==4 &&
|
&state->w, &state->h, &state->x, &state->y)==4 &&
|
||||||
(state->w>0 && state->h>0)) {
|
(state->w>0 && state->h>0))) {
|
||||||
state->use_geometry = 1;
|
state->w = 0;
|
||||||
} else if (sscanf(PLGetString(value), "%i,%i,%i,%i",
|
state->h = 0;
|
||||||
&state->x, &state->y, &state->w, &state->h)==4 &&
|
}
|
||||||
(state->w>0 && state->h>0)) {
|
|
||||||
/* TODO: remove redundant sscanf() in version 0.20.x */
|
|
||||||
state->use_geometry = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|||||||
@@ -901,7 +901,7 @@ StartUp(Bool defaultScreenOnly)
|
|||||||
wScreen[j]->last_dock = wScreen[j]->dock;
|
wScreen[j]->last_dock = wScreen[j]->dock;
|
||||||
|
|
||||||
manageAllWindows(wScreen[j]);
|
manageAllWindows(wScreen[j]);
|
||||||
|
|
||||||
/* restore saved menus */
|
/* restore saved menus */
|
||||||
wMenuRestoreState(wScreen[j]);
|
wMenuRestoreState(wScreen[j]);
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ wTextureDestroy(WScreen *scr, WTexture *texture)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* some stupid servers don't like white or black being freed...
|
* some stupid servers don't like white or black being freed...
|
||||||
*/
|
*/
|
||||||
@@ -244,6 +244,45 @@ wTextureMakeGradient(WScreen *scr, int style, RColor *from, RColor *to)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WTexIGradient*
|
||||||
|
wTextureMakeIGradient(WScreen *scr, int thickness1, RColor colors1[2],
|
||||||
|
int thickness2, RColor colors2[2])
|
||||||
|
{
|
||||||
|
WTexIGradient *texture;
|
||||||
|
XGCValues gcv;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
texture = wmalloc(sizeof(WTexture));
|
||||||
|
memset(texture, 0, sizeof(WTexture));
|
||||||
|
texture->type = WTEX_IGRADIENT;
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
texture->colors1[i] = colors1[i];
|
||||||
|
texture->colors2[i] = colors2[i];
|
||||||
|
}
|
||||||
|
texture->thickness1 = thickness1;
|
||||||
|
texture->thickness2 = thickness2;
|
||||||
|
if (thickness1 >= thickness2) {
|
||||||
|
texture->normal.red = (colors1[0].red + colors1[1].red)<<7;
|
||||||
|
texture->normal.green = (colors1[0].green + colors1[1].green)<<7;
|
||||||
|
texture->normal.blue = (colors1[0].blue + colors1[1].blue)<<7;
|
||||||
|
} else {
|
||||||
|
texture->normal.red = (colors2[0].red + colors2[1].red)<<7;
|
||||||
|
texture->normal.green = (colors2[0].green + colors2[1].green)<<7;
|
||||||
|
texture->normal.blue = (colors2[0].blue + colors2[1].blue)<<7;
|
||||||
|
}
|
||||||
|
XAllocColor(dpy, scr->w_colormap, &texture->normal);
|
||||||
|
gcv.background = gcv.foreground = texture->normal.pixel;
|
||||||
|
gcv.graphics_exposures = False;
|
||||||
|
texture->normal_gc = XCreateGC(dpy, scr->w_win, GCForeground|GCBackground
|
||||||
|
|GCGraphicsExposures, &gcv);
|
||||||
|
|
||||||
|
return texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WTexMGradient*
|
WTexMGradient*
|
||||||
wTextureMakeMGradient(WScreen *scr, int style, RColor **colors)
|
wTextureMakeMGradient(WScreen *scr, int style, RColor **colors)
|
||||||
{
|
{
|
||||||
@@ -318,8 +357,6 @@ wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file, XColor *color)
|
|||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WTexTGradient*
|
WTexTGradient*
|
||||||
wTextureMakeTGradient(WScreen *scr, int style, RColor *from, RColor *to,
|
wTextureMakeTGradient(WScreen *scr, int style, RColor *from, RColor *to,
|
||||||
char *pixmap_file, int opacity)
|
char *pixmap_file, int opacity)
|
||||||
@@ -458,6 +495,14 @@ wTextureRenderImage(WTexture *texture, int width, int height,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WTEX_IGRADIENT:
|
||||||
|
image = RRenderInterwovenGradient(width, height,
|
||||||
|
texture->igradient.colors1,
|
||||||
|
texture->igradient.thickness1,
|
||||||
|
texture->igradient.colors2,
|
||||||
|
texture->igradient.thickness2);
|
||||||
|
break;
|
||||||
|
|
||||||
case WTEX_HGRADIENT:
|
case WTEX_HGRADIENT:
|
||||||
subtype = RGRD_HORIZONTAL;
|
subtype = RGRD_HORIZONTAL;
|
||||||
goto render_gradient;
|
goto render_gradient;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Window Maker window manager
|
* Window Maker window manager
|
||||||
*
|
*
|
||||||
* Copyright (c) 1997, 1998 Alfredo K. Kojima
|
* Copyright (c) 1997-2000 Alfredo K. Kojima
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -43,11 +43,12 @@
|
|||||||
#define WTEX_MHGRADIENT ((1<<5)|WREL_BORDER_MASK)
|
#define WTEX_MHGRADIENT ((1<<5)|WREL_BORDER_MASK)
|
||||||
#define WTEX_MVGRADIENT ((1<<6)|WREL_BORDER_MASK)
|
#define WTEX_MVGRADIENT ((1<<6)|WREL_BORDER_MASK)
|
||||||
#define WTEX_MDGRADIENT ((1<<7)|WREL_BORDER_MASK)
|
#define WTEX_MDGRADIENT ((1<<7)|WREL_BORDER_MASK)
|
||||||
#define WTEX_PIXMAP (1<<8)
|
#define WTEX_IGRADIENT ((1<<8)|WREL_BORDER_MASK)
|
||||||
#define WTEX_THGRADIENT ((1<<9)|WREL_BORDER_MASK)
|
#define WTEX_PIXMAP (1<<10)
|
||||||
#define WTEX_TVGRADIENT ((1<<10)|WREL_BORDER_MASK)
|
#define WTEX_THGRADIENT ((1<<11)|WREL_BORDER_MASK)
|
||||||
#define WTEX_TDGRADIENT ((1<<11)|WREL_BORDER_MASK)
|
#define WTEX_TVGRADIENT ((1<<12)|WREL_BORDER_MASK)
|
||||||
#define WTEX_FUNCTION ((1<<12)|WREL_BORDER_MASK)
|
#define WTEX_TDGRADIENT ((1<<13)|WREL_BORDER_MASK)
|
||||||
|
#define WTEX_FUNCTION ((1<<14)|WREL_BORDER_MASK)
|
||||||
|
|
||||||
/* pixmap subtypes */
|
/* pixmap subtypes */
|
||||||
#define WTP_TILE 2
|
#define WTP_TILE 2
|
||||||
@@ -100,6 +101,19 @@ typedef struct WTexMGradient {
|
|||||||
} WTexMGradient;
|
} WTexMGradient;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct WTexIGradient {
|
||||||
|
short type;
|
||||||
|
char dummy;
|
||||||
|
XColor normal;
|
||||||
|
GC normal_gc;
|
||||||
|
|
||||||
|
RColor colors1[2];
|
||||||
|
RColor colors2[2];
|
||||||
|
int thickness1;
|
||||||
|
int thickness2;
|
||||||
|
} WTexIGradient;
|
||||||
|
|
||||||
|
|
||||||
typedef struct WTexPixmap {
|
typedef struct WTexPixmap {
|
||||||
short type;
|
short type;
|
||||||
char subtype;
|
char subtype;
|
||||||
@@ -137,6 +151,7 @@ typedef union WTexture {
|
|||||||
WTexAny any;
|
WTexAny any;
|
||||||
WTexSolid solid;
|
WTexSolid solid;
|
||||||
WTexGradient gradient;
|
WTexGradient gradient;
|
||||||
|
WTexIGradient igradient;
|
||||||
WTexMGradient mgradient;
|
WTexMGradient mgradient;
|
||||||
WTexPixmap pixmap;
|
WTexPixmap pixmap;
|
||||||
WTexTGradient tgradient;
|
WTexTGradient tgradient;
|
||||||
@@ -148,6 +163,7 @@ WTexSolid *wTextureMakeSolid(WScreen*, XColor*);
|
|||||||
WTexGradient *wTextureMakeGradient(WScreen*, int, RColor*, RColor*);
|
WTexGradient *wTextureMakeGradient(WScreen*, int, RColor*, RColor*);
|
||||||
WTexMGradient *wTextureMakeMGradient(WScreen*, int, RColor**);
|
WTexMGradient *wTextureMakeMGradient(WScreen*, int, RColor**);
|
||||||
WTexTGradient *wTextureMakeTGradient(WScreen*, int, RColor*, RColor*, char *, int);
|
WTexTGradient *wTextureMakeTGradient(WScreen*, int, RColor*, RColor*, char *, int);
|
||||||
|
WTexIGradient *wTextureMakeIGradient(WScreen*, int, RColor[], int, RColor[]);
|
||||||
WTexPixmap *wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file,
|
WTexPixmap *wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file,
|
||||||
XColor *color);
|
XColor *color);
|
||||||
#ifdef TEXTURE_PLUGIN
|
#ifdef TEXTURE_PLUGIN
|
||||||
|
|||||||
50
src/window.c
50
src/window.c
@@ -818,6 +818,7 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
!WFLAGP(wwin, no_miniaturizable)) {
|
!WFLAGP(wwin, no_miniaturizable)) {
|
||||||
wwin->flags.miniaturized = win_state->state->miniaturized;
|
wwin->flags.miniaturized = win_state->state->miniaturized;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IS_OMNIPRESENT(wwin)) {
|
if (!IS_OMNIPRESENT(wwin)) {
|
||||||
int w = wDefaultGetStartWorkspace(scr, wwin->wm_instance,
|
int w = wDefaultGetStartWorkspace(scr, wwin->wm_instance,
|
||||||
wwin->wm_class);
|
wwin->wm_class);
|
||||||
@@ -842,13 +843,34 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
wwin->flags.shaded = wstate->shaded;
|
wwin->flags.shaded = wstate->shaded;
|
||||||
wwin->flags.hidden = wstate->hidden;
|
wwin->flags.hidden = wstate->hidden;
|
||||||
wwin->flags.miniaturized = wstate->miniaturized;
|
wwin->flags.miniaturized = wstate->miniaturized;
|
||||||
workspace = wstate->workspace;
|
wwin->flags.maximized = wstate->maximized;
|
||||||
|
if (wwin->flags.maximized) {
|
||||||
|
wwin->old_geometry.x = wstate->x;
|
||||||
|
wwin->old_geometry.y = wstate->y;
|
||||||
|
wwin->old_geometry.width = wstate->w;
|
||||||
|
wwin->old_geometry.height = wstate->h;
|
||||||
|
}
|
||||||
|
|
||||||
if (scr->flags.startup && wstate->window_shortcuts > 0) {
|
workspace = wstate->workspace;
|
||||||
|
} else {
|
||||||
|
wstate = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* restore window shortcut */
|
||||||
|
if (wstate != NULL || win_state != NULL) {
|
||||||
|
unsigned mask = 0;
|
||||||
|
|
||||||
|
if (win_state != NULL)
|
||||||
|
mask = win_state->state->window_shortcuts;
|
||||||
|
|
||||||
|
if (wstate != NULL && mask == 0)
|
||||||
|
mask = wstate->window_shortcuts;
|
||||||
|
|
||||||
|
if (mask > 0) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
|
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
|
||||||
if (wstate->window_shortcuts & (1<<i)) {
|
if (mask & (1<<i)) {
|
||||||
if (!scr->shortcutWindows[i])
|
if (!scr->shortcutWindows[i])
|
||||||
scr->shortcutWindows[i] = WMCreateBag(4);
|
scr->shortcutWindows[i] = WMCreateBag(4);
|
||||||
|
|
||||||
@@ -856,6 +878,8 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (wstate != NULL) {
|
||||||
free(wstate);
|
free(wstate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -895,7 +919,7 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* setup window geometry */
|
/* setup window geometry */
|
||||||
if (win_state && win_state->state->use_geometry) {
|
if (win_state && win_state->state->w > 0) {
|
||||||
width = win_state->state->w;
|
width = win_state->state->w;
|
||||||
height = win_state->state->h;
|
height = win_state->state->h;
|
||||||
}
|
}
|
||||||
@@ -908,7 +932,7 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
{
|
{
|
||||||
Bool dontBring = False;
|
Bool dontBring = False;
|
||||||
|
|
||||||
if (win_state && win_state->state->use_geometry) {
|
if (win_state && win_state->state->w > 0) {
|
||||||
x = win_state->state->x;
|
x = win_state->state->x;
|
||||||
y = win_state->state->y;
|
y = win_state->state->y;
|
||||||
} else if ((wwin->transient_for==None
|
} else if ((wwin->transient_for==None
|
||||||
@@ -973,7 +997,7 @@ wManageWindow(WScreen *scr, Window window)
|
|||||||
|
|
||||||
wwin->frame = wFrameWindowCreate(scr, window_level,
|
wwin->frame = wFrameWindowCreate(scr, window_level,
|
||||||
x, y, width, height,
|
x, y, width, height,
|
||||||
&wPreferences.window_title_clearance, foo,
|
&wPreferences.window_title_clearance, foo,
|
||||||
scr->window_title_texture,
|
scr->window_title_texture,
|
||||||
scr->resizebar_texture,
|
scr->resizebar_texture,
|
||||||
scr->window_title_pixel,
|
scr->window_title_pixel,
|
||||||
@@ -2299,6 +2323,18 @@ wWindowSaveState(WWindow *wwin)
|
|||||||
data[1] = wwin->flags.miniaturized;
|
data[1] = wwin->flags.miniaturized;
|
||||||
data[2] = wwin->flags.shaded;
|
data[2] = wwin->flags.shaded;
|
||||||
data[3] = wwin->flags.hidden;
|
data[3] = wwin->flags.hidden;
|
||||||
|
data[4] = wwin->flags.maximized;
|
||||||
|
if (wwin->flags.maximized == 0) {
|
||||||
|
data[5] = wwin->frame_x;
|
||||||
|
data[6] = wwin->frame_y;
|
||||||
|
data[7] = wwin->frame->core->width;
|
||||||
|
data[8] = wwin->frame->core->height;
|
||||||
|
} else {
|
||||||
|
data[5] = wwin->old_geometry.x;
|
||||||
|
data[6] = wwin->old_geometry.y;
|
||||||
|
data[7] = wwin->old_geometry.width;
|
||||||
|
data[8] = wwin->old_geometry.height;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
|
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
|
||||||
if (wwin->screen_ptr->shortcutWindows[i] &&
|
if (wwin->screen_ptr->shortcutWindows[i] &&
|
||||||
@@ -2333,7 +2369,7 @@ getSavedState(Window window, WSavedState **state)
|
|||||||
(*state)->miniaturized = data[1];
|
(*state)->miniaturized = data[1];
|
||||||
(*state)->shaded = data[2];
|
(*state)->shaded = data[2];
|
||||||
(*state)->hidden = data[3];
|
(*state)->hidden = data[3];
|
||||||
(*state)->use_geometry = data[4];
|
(*state)->maximized = data[4];
|
||||||
(*state)->x = data[5];
|
(*state)->x = data[5];
|
||||||
(*state)->y = data[6];
|
(*state)->y = data[6];
|
||||||
(*state)->w = data[7];
|
(*state)->w = data[7];
|
||||||
|
|||||||
@@ -310,9 +310,9 @@ typedef struct WSavedState {
|
|||||||
int miniaturized;
|
int miniaturized;
|
||||||
int shaded;
|
int shaded;
|
||||||
int hidden;
|
int hidden;
|
||||||
int use_geometry;
|
int maximized;
|
||||||
int x;
|
int x; /* original geometry of the */
|
||||||
int y;
|
int y; /* window if it's maximized */
|
||||||
unsigned int w;
|
unsigned int w;
|
||||||
unsigned int h;
|
unsigned int h;
|
||||||
unsigned window_shortcuts; /* mask like 1<<shortcut_number */
|
unsigned window_shortcuts; /* mask like 1<<shortcut_number */
|
||||||
|
|||||||
@@ -100,6 +100,9 @@ execWindowOptionCommand(WMenu *menu, WMenuEntry *entry)
|
|||||||
case WO_OMNIPRESENT:
|
case WO_OMNIPRESENT:
|
||||||
wwin->flags.omnipresent^=1;
|
wwin->flags.omnipresent^=1;
|
||||||
UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_WORKSPACE);
|
UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_WORKSPACE);
|
||||||
|
#ifdef GNOME_STUFF
|
||||||
|
wGNOMEUpdateClientStateHint(wwin, False);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1506,24 +1506,17 @@ createInspectorForWindow(WWindow *wwin, int xpos, int ypos,
|
|||||||
WMSetFrameTitle(panel->iconFrm, _("Miniwindow Image"));
|
WMSetFrameTitle(panel->iconFrm, _("Miniwindow Image"));
|
||||||
|
|
||||||
panel->iconLbl = WMCreateLabel(panel->iconFrm);
|
panel->iconLbl = WMCreateLabel(panel->iconFrm);
|
||||||
WMMoveWidget(panel->iconLbl, PWIDTH - (2 * 15) - 22 - 64, 30);
|
WMMoveWidget(panel->iconLbl, PWIDTH - (2 * 15) - 22 - 64, 20);
|
||||||
WMResizeWidget(panel->iconLbl, 64, 64);
|
WMResizeWidget(panel->iconLbl, 64, 64);
|
||||||
WMSetLabelRelief(panel->iconLbl, WRGroove);
|
WMSetLabelRelief(panel->iconLbl, WRGroove);
|
||||||
WMSetLabelImagePosition(panel->iconLbl, WIPImageOnly);
|
WMSetLabelImagePosition(panel->iconLbl, WIPImageOnly);
|
||||||
|
|
||||||
panel->browseIconBtn = WMCreateCommandButton(panel->iconFrm);
|
panel->browseIconBtn = WMCreateCommandButton(panel->iconFrm);
|
||||||
WMSetButtonAction(panel->browseIconBtn, chooseIconCallback, panel);
|
WMSetButtonAction(panel->browseIconBtn, chooseIconCallback, panel);
|
||||||
WMMoveWidget(panel->browseIconBtn, 22, 30);
|
WMMoveWidget(panel->browseIconBtn, 22, 32);
|
||||||
WMResizeWidget(panel->browseIconBtn, 100, 26);
|
WMResizeWidget(panel->browseIconBtn, 120, 26);
|
||||||
WMSetButtonText(panel->browseIconBtn, _("Browse..."));
|
WMSetButtonText(panel->browseIconBtn, _("Browse..."));
|
||||||
|
|
||||||
#if 0
|
|
||||||
panel->updateIconBtn = WMCreateCommandButton(panel->iconFrm);
|
|
||||||
WMSetButtonAction(panel->updateIconBtn, (WMAction*)updateIcon, panel);
|
|
||||||
WMMoveWidget(panel->updateIconBtn, 22, 65);
|
|
||||||
WMResizeWidget(panel->updateIconBtn, 100, 26);
|
|
||||||
WMSetButtonText(panel->updateIconBtn, _("Update"));
|
|
||||||
#endif
|
|
||||||
#ifdef wrong_behaviour
|
#ifdef wrong_behaviour
|
||||||
WMSetButtonImagePosition(panel->updateIconBtn, WIPRight);
|
WMSetButtonImagePosition(panel->updateIconBtn, WIPRight);
|
||||||
pixmap = WMGetSystemPixmap(scr->wmscreen, WSIReturnArrow);
|
pixmap = WMGetSystemPixmap(scr->wmscreen, WSIReturnArrow);
|
||||||
@@ -1535,20 +1528,21 @@ createInspectorForWindow(WWindow *wwin, int xpos, int ypos,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
panel->fileLbl = WMCreateLabel(panel->iconFrm);
|
panel->fileLbl = WMCreateLabel(panel->iconFrm);
|
||||||
WMMoveWidget(panel->fileLbl, 20, 95);
|
WMMoveWidget(panel->fileLbl, 20, 85);
|
||||||
WMResizeWidget(panel->fileLbl, PWIDTH - (2 * 15) - (2 * 20), 14);
|
WMResizeWidget(panel->fileLbl, PWIDTH - (2 * 15) - (2 * 20), 14);
|
||||||
WMSetLabelText(panel->fileLbl, _("Icon File Name:"));
|
WMSetLabelText(panel->fileLbl, _("Icon File Name:"));
|
||||||
|
|
||||||
panel->fileText = WMCreateTextField(panel->iconFrm);
|
panel->fileText = WMCreateTextField(panel->iconFrm);
|
||||||
WMMoveWidget(panel->fileText, 20, 115);
|
WMMoveWidget(panel->fileText, 20, 105);
|
||||||
WMResizeWidget(panel->fileText, PWIDTH - (2 * 15) - (2 * 15), 20);
|
WMResizeWidget(panel->fileText, PWIDTH - (2 * 20) - (2 * 15), 20);
|
||||||
WMSetTextFieldText(panel->fileText, NULL);
|
WMSetTextFieldText(panel->fileText, NULL);
|
||||||
WMAddNotificationObserver(textEditedObserver, panel,
|
WMAddNotificationObserver(textEditedObserver, panel,
|
||||||
WMTextDidEndEditingNotification,
|
WMTextDidEndEditingNotification,
|
||||||
panel->fileText);
|
panel->fileText);
|
||||||
|
|
||||||
panel->alwChk = WMCreateSwitchButton(panel->iconFrm);
|
panel->alwChk = WMCreateSwitchButton(panel->iconFrm);
|
||||||
WMMoveWidget(panel->alwChk, 20, 140);
|
WMMoveWidget(panel->alwChk, 20, 130);
|
||||||
WMResizeWidget(panel->alwChk, PWIDTH - (2 * 15) - (2 * 15), 20);
|
WMResizeWidget(panel->alwChk, PWIDTH - (2 * 15) - (2 * 15), 30);
|
||||||
WMSetButtonText(panel->alwChk, _("Ignore client supplied icon"));
|
WMSetButtonText(panel->alwChk, _("Ignore client supplied icon"));
|
||||||
WMSetButtonSelected(panel->alwChk, WFLAGP(wwin, always_user_icon));
|
WMSetButtonSelected(panel->alwChk, WFLAGP(wwin, always_user_icon));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user