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

*** empty log message ***

This commit is contained in:
kojima
1999-04-10 18:27:21 +00:00
parent 9df0e16707
commit 4a473b8ad7
19 changed files with 441 additions and 331 deletions

View File

@@ -7,7 +7,11 @@ Changes since version 0.52.0:
- changed configuration updating to use notifications - changed configuration updating to use notifications
- fixed window move through workspaces in nonopaquemove - fixed window move through workspaces in nonopaquemove
- added message to immediately reread configuration data - added message to immediately reread configuration data
- fixed some bug in XKB modelock toggling
- KDE: added kfm icon selection
- fixed crash bug when hiding apps with appicon disabled
- fixed wrong initial workspace # being shown on attributes panel
- XSMP updates
Changes since version 0.51.2: Changes since version 0.51.2:
............................. .............................

View File

@@ -39,17 +39,20 @@ Management X11R6 style SM is being worked.
Dock kpanel, GNOME panel and Dock kpanel Dock kpanel, GNOME panel and Dock kpanel
Built-in Yes No
krootbgwm
GNOME support Yes No GNOME support Yes No
Memory Usage(1) 1.85Mb Lite: 1.79Mb In KDE 1.0, 3.13Mb Memory Usage(1) 1.85Mb In KDE 1.0, 3.13Mb
In KDE 1.1, probably more In KDE 1.1, probably more
(1) Memory usage was tested by running wmaker and kwm at the same machine (1) Memory usage was tested by running wmaker and kwm at the same machine
with the same windows, on the same screen and similar window texture with the same windows, on the same screen and similar window texture
configurations (at different times, of course). I looked in the output of configurations (at different times, of course). I looked in the output of
ps -m, in the SIZE field, right after starting the window managers. The Lite ps -m, in the SIZE field, right after starting the window managers.
value for wmaker, is for when it was compiled with --enable-lite.
Enabling KDE Support Enabling KDE Support
@@ -57,17 +60,7 @@ Enabling KDE Support
To enable KDE support in Window Maker, you must compile it after To enable KDE support in Window Maker, you must compile it after
configuring it as follows: configuring it as follows:
./configure --enable-kde --enable-lite ./configure --enable-kde
The --enable-lite flag is *optional*, but will reduce some memory
usage by removing things that are duplicated in Window Maker and KDE.
Do not enable it if you don't care about a few dozen kbytes of memory
savings (see table above). It won't make KDE or Window Maker any
slower/faster.
Then, open WPrefs and turn on the "Disable mouse actions"
option in the Mouse related options panel. Or enable the
DisableWSMouseActions option by hand.
Then, just replace kwm with wmaker in your startkde script. Then, just replace kwm with wmaker in your startkde script.
If you are going to use Window Makers sound server, comment out If you are going to use Window Makers sound server, comment out

View File

@@ -1,3 +1,9 @@
changes since wmaker 0.52.0:
............................
- added int WMGetBrowserMaxVisibleColumns(WMBrowser *bPtr);
changes since wmaker 0.51.2: changes since wmaker 0.51.2:
............................ ............................

View File

@@ -911,6 +911,8 @@ int WMGetBrowserSelectedRowInColumn(WMBrowser *bPtr, int column);
int WMGetBrowserNumberOfColumns(WMBrowser *bPtr); int WMGetBrowserNumberOfColumns(WMBrowser *bPtr);
int WMGetBrowserMaxVisibleColumns(WMBrowser *bPtr);
WMList *WMGetBrowserListInColumn(WMBrowser *bPtr, int column); WMList *WMGetBrowserListInColumn(WMBrowser *bPtr, int column);
extern char *WMBrowserDidScrollNotification; extern char *WMBrowserDidScrollNotification;

View File

@@ -147,6 +147,13 @@ WMCreateBrowser(WMWidget *parent)
} }
int
WMGetBrowserMaxVisibleColumns(WMBrowser *bPtr)
{
return bPtr->maxVisibleColumns;
}
void void
WMSetBrowserMaxVisibleColumns(WMBrowser *bPtr, int columns) WMSetBrowserMaxVisibleColumns(WMBrowser *bPtr, int columns)
{ {

View File

@@ -95,9 +95,6 @@ typedef struct W_ColorPanel {
WMWindow *win; WMWindow *win;
WMFont *font8; WMFont *font8;
WMFont *font12; WMFont *font12;
void *clientData;
WMAction *action;
/* Common Stuff */ /* Common Stuff */
WMColorWell *colorWell; WMColorWell *colorWell;
@@ -198,9 +195,8 @@ typedef struct W_ColorPanel {
char *configurationPath; char *configurationPath;
struct { struct {
unsigned int continuous:1;
unsigned int dragging:1; unsigned int dragging:1;
unsigned int done:1;
} flags; } flags;
} W_ColorPanel; } W_ColorPanel;
@@ -246,8 +242,6 @@ static int getPickerPart(W_ColorPanel *panel, int x, int y);
static void readConfiguration(W_ColorPanel *panel); static void readConfiguration(W_ColorPanel *panel);
static void readXColors(W_ColorPanel *panel); static void readXColors(W_ColorPanel *panel);
static void closeWindowCallback(WMWidget *w, void *data);
static Cursor magnifyGrabPointer(W_ColorPanel *panel); static Cursor magnifyGrabPointer(W_ColorPanel *panel);
static WMPoint magnifyInitialize(W_ColorPanel *panel); static WMPoint magnifyInitialize(W_ColorPanel *panel);
static void magnifyPutCursor(WMWidget *w, void *data); static void magnifyPutCursor(WMWidget *w, void *data);
@@ -316,14 +310,6 @@ static void cmykInit(W_ColorPanel *panel);
static void hsbInit(W_ColorPanel *panel); static void hsbInit(W_ColorPanel *panel);
void
WMSetColorPanelAction(WMColorPanel *panel, WMAction *action, void *data)
{
panel->action = action;
panel->clientData = data;
}
static WMColorPanel* static WMColorPanel*
makeColorPanel(WMScreen *scrPtr, char *name) makeColorPanel(WMScreen *scrPtr, char *name)
{ {
@@ -346,7 +332,6 @@ makeColorPanel(WMScreen *scrPtr, char *name)
panel->win = WMCreateWindowWithStyle(scrPtr, name, WMTitledWindowMask | WMClosableWindowMask | WMResizableWindowMask); panel->win = WMCreateWindowWithStyle(scrPtr, name, WMTitledWindowMask | WMClosableWindowMask | WMResizableWindowMask);
WMResizeWidget(panel->win, PWIDTH, PHEIGHT); WMResizeWidget(panel->win, PWIDTH, PHEIGHT);
WMSetWindowTitle(panel->win, "Colors"); WMSetWindowTitle(panel->win, "Colors");
WMSetWindowCloseAction(panel->win, closeWindowCallback, panel);
/* Set Default ColorPanel Mode(s) */ /* Set Default ColorPanel Mode(s) */
@@ -514,7 +499,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
RDestroyImage(image); RDestroyImage(image);
W_PaintText(W_VIEW(panel->grayBrightnessS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->white), False, "Brightness", strlen("Brightness")); W_PaintText(W_VIEW(panel->grayBrightnessS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->white), False, "Brightness", strlen("Brightness"));
WMSetSliderImage(panel->grayBrightnessS, pixmap); WMSetSliderImage(panel->grayBrightnessS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -582,7 +567,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->rgbRedS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->white), False, "Red", strlen("Red")); W_PaintText(W_VIEW(panel->rgbRedS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->white), False, "Red", strlen("Red"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->rgbRedS, pixmap); WMSetSliderImage(panel->rgbRedS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -609,7 +594,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->rgbGreenS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->white), False, "Green", strlen("Green")); W_PaintText(W_VIEW(panel->rgbGreenS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->white), False, "Green", strlen("Green"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->rgbGreenS, pixmap); WMSetSliderImage(panel->rgbGreenS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -636,7 +621,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->rgbBlueS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->white), False, "Blue", strlen("Blue")); W_PaintText(W_VIEW(panel->rgbBlueS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->white), False, "Blue", strlen("Blue"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->rgbBlueS, pixmap); WMSetSliderImage(panel->rgbBlueS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -689,7 +674,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->cmykCyanS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->black), False, "Cyan", strlen("Cyan")); W_PaintText(W_VIEW(panel->cmykCyanS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->black), False, "Cyan", strlen("Cyan"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->cmykCyanS, pixmap); WMSetSliderImage(panel->cmykCyanS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -716,7 +701,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->cmykMagentaS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->black), False, "Magenta", strlen("Magenta")); W_PaintText(W_VIEW(panel->cmykMagentaS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->black), False, "Magenta", strlen("Magenta"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->cmykMagentaS, pixmap); WMSetSliderImage(panel->cmykMagentaS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -743,7 +728,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->cmykYellowS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->black), False, "Yellow", strlen("Yellow")); W_PaintText(W_VIEW(panel->cmykYellowS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->black), False, "Yellow", strlen("Yellow"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->cmykYellowS, pixmap); WMSetSliderImage(panel->cmykYellowS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -771,7 +756,7 @@ makeColorPanel(WMScreen *scrPtr, char *name)
image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); image = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0); pixmap = WMCreatePixmapFromRImage(scrPtr, image, 0);
W_PaintText(W_VIEW(panel->cmykBlackS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scrPtr->black), False, "Black", strlen("Black")); W_PaintText(W_VIEW(panel->cmykBlackS), pixmap->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scrPtr->black), False, "Black", strlen("Black"));
RDestroyImage(image); RDestroyImage(image);
WMSetSliderImage(panel->cmykBlackS, pixmap); WMSetSliderImage(panel->cmykBlackS, pixmap);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
@@ -1013,33 +998,52 @@ WMFreeColorPanel(WMColorPanel *panel)
} }
void int
WMCloseColorPanel(WMColorPanel *panel) WMRunColorPanel(WMColorPanel *panel, WMWindow *owner, RColor color)
{
WMCloseWindow(panel->win);
}
void
WMShowColorPanel(WMColorPanel *panel)
{ {
WMScreen *scr = WMWidgetScreen(panel->win); WMScreen *scr = WMWidgetScreen(panel->win);
XEvent event;
RHSVColor hsvcolor;
GC bgc = W_GC(scr->black);
GC wgc = W_GC(scr->white);
WMChangePanelOwner(panel->win, owner);
WMSetColorPanelColor(panel, color);
panel->wheelMtrx = wheelInitMatrix(panel); /* Needs to be done After Color is set */
WMSetColorPanelPickerMode(panel, WMWheelModeColorPanel); /* Maybe put this in sub-function ... Initialising selection images */
wheelInit(panel); RRGBtoHSV(&color, &hsvcolor);
panel->colx = 2 + rint((colorWheelSize / 2.0) * (1 + (hsvcolor.saturation/255.0) * cos( hsvcolor.hue*M_PI/180.0)));
panel->coly = 2 + rint((colorWheelSize / 2.0) * (1 + (hsvcolor.saturation/255.0) * sin(-hsvcolor.hue*M_PI/180.0)));
wheelUpdateBrightnessGradientFromHSV(panel, hsvcolor);
WMSetSliderValue(panel->wheelBrightnessS, 255 - hsvcolor.value);
panel->selectionImg = XCreatePixmap(scr->display, W_VIEW(panel->wheelFrm)->window, 4, 4, scr->depth);
XFillRectangle(scr->display, panel->selectionImg, bgc, 0, 0, 4, 4);
XFillRectangle(scr->display, panel->selectionImg, wgc, 1, 1, 2, 2);
/* End of initialisation section */
panel->palx = customPaletteWidth/2;
panel->paly = customPaletteHeight/2;
WMSetPickerMode(panel, WMWheelModeColorPanel);
panel->flags.done = 0;
WMMapWidget(panel->win); WMMapWidget(panel->win);
while (!panel->flags.done) {
WMNextEvent(scr->display, &event);
WMHandleEvent(&event);
}
WMCloseWindow(panel->win);
return 0;
} }
static void
closeWindowCallback(WMWidget *w, void *data)
{
W_ColorPanel *panel = (W_ColorPanel*)data;
WMCloseWindow(panel->win);
}
static void static void
readConfiguration(W_ColorPanel *panel) readConfiguration(W_ColorPanel *panel)
@@ -1109,7 +1113,7 @@ readXColors(W_ColorPanel *panel)
void void
WMSetColorPanelPickerMode(WMColorPanel *panel, WMColorPanelMode mode) WMSetPickerMode(WMColorPanel *panel, WMColorPanelMode mode)
{ {
W_Screen *scr = WMWidgetScreen(panel->win); W_Screen *scr = WMWidgetScreen(panel->win);
@@ -1196,73 +1200,17 @@ WMSetColorPanelPickerMode(WMColorPanel *panel, WMColorPanelMode mode)
} }
void void
WMSetColorPanelColor(WMColorPanel *panel, WMColor *color) WMSetColorPanelColor(WMColorPanel *panel, RColor color)
{ {
WMScreen *scr = WMWidgetScreen(panel->win); WMScreen *scr = WMWidgetScreen(panel->win);
RHSVColor hsvcolor; WMColor *wellcolor;
RColor intcolor;
GC bgc = WMColorGC(scr->black);
GC wgc = WMColorGC(scr->white);
int originalHue;
WMSetColorWellColor(panel->colorWell, color);
intcolor.red = color->color.red >> 8;
intcolor.green = color->color.green >> 8;
intcolor.blue = color->color.blue >> 8;
panel->color = intcolor;
/* If color was set by HSB-Panel do not convert back to hsv */
if (panel->lastChanged != WMHSBModeColorPanel) {
/* if color is black, hue is undetermined, so it must be restored */
if ((panel->color.red == 0) &&
(panel->color.green == 0) &&
(panel->color.blue == 0) &&
(panel->hsvcolor.hue <= 359))
{
originalHue = panel->hsvcolor.hue;
RRGBtoHSV(&panel->color, &panel->hsvcolor);
panel->hsvcolor.hue = originalHue;
} else {
RRGBtoHSV(&panel->color, &panel->hsvcolor);
}
}
panel->wheelMtrx = wheelInitMatrix(panel); /* Needs to be done After Color is set */
/* Maybe put this in a sub-function ... Initialising selected images */
RRGBtoHSV(&intcolor, &hsvcolor);
panel->colx = 2 + rint((colorWheelSize / 2.0) * (1 + (hsvcolor.saturation/255.0) * cos( hsvcolor.hue*M_PI/180.0)));
panel->coly = 2 + rint((colorWheelSize / 2.0) * (1 + (hsvcolor.saturation/255.0) * sin(-hsvcolor.hue*M_PI/180.0)));
wheelUpdateBrightnessGradientFromHSV(panel, hsvcolor);
WMSetSliderValue(panel->wheelBrightnessS, 255 - hsvcolor.value);
panel->selectionImg = XCreatePixmap(scr->display, W_VIEW(panel->wheelFrm)->window, 4, 4, scr->depth);
XFillRectangle(scr->display, panel->selectionImg, bgc, 0, 0, 4, 4);
XFillRectangle(scr->display, panel->selectionImg, wgc, 1, 1, 2, 2);
/* End of initialisation section */
panel->palx = customPaletteWidth/2;
panel->paly = customPaletteHeight/2;
WMSetColorPanelPickerMode(panel, panel->mode);
}
updateSwatch(WMColorPanel *panel, RColor color)
{
WMScreen *scr = WMWidgetScreen(panel->win);
WMColor *wellcolor;
int originalHue; int originalHue;
wellcolor = WMCreateRGBColor(scr, color.red << 8, color.green << 8, color.blue << 8, True); wellcolor = WMCreateRGBColor(scr, color.red << 8, color.green << 8, color.blue << 8, True);
WMSetColorWellColor(panel->colorWell, wellcolor); WMSetColorWellColor(panel->colorWell, wellcolor);
WMReleaseColor(wellcolor); WMReleaseColor(wellcolor);
panel->color = color; panel->color = color;
/* If color was set by HSB-Panel do not convert back to hsv */ /* If color was set by HSB-Panel do not convert back to hsv */
if (panel->lastChanged != WMHSBModeColorPanel) { if (panel->lastChanged != WMHSBModeColorPanel) {
@@ -1280,10 +1228,6 @@ updateSwatch(WMColorPanel *panel, RColor color)
RRGBtoHSV(&panel->color, &panel->hsvcolor); RRGBtoHSV(&panel->color, &panel->hsvcolor);
} }
} }
if (panel->action && (!panel->flags.dragging || panel->flags.continuous)) {
(*panel->action)(panel, panel->clientData);
}
} }
static void static void
@@ -1292,21 +1236,21 @@ modeButtonCallback(WMWidget *w, void *data)
W_ColorPanel *panel = (W_ColorPanel*)(data); W_ColorPanel *panel = (W_ColorPanel*)(data);
if (w == panel->wheelBtn) if (w == panel->wheelBtn)
WMSetColorPanelPickerMode(panel, WMWheelModeColorPanel); WMSetPickerMode(panel, WMWheelModeColorPanel);
else if (w == panel->slidersBtn) else if (w == panel->slidersBtn)
WMSetColorPanelPickerMode(panel, panel->slidersmode); WMSetPickerMode(panel, panel->slidersmode);
else if (w == panel->customPaletteBtn) else if (w == panel->customPaletteBtn)
WMSetColorPanelPickerMode(panel, WMCustomPaletteModeColorPanel); WMSetPickerMode(panel, WMCustomPaletteModeColorPanel);
else if (w == panel->colorListBtn) else if (w == panel->colorListBtn)
WMSetColorPanelPickerMode(panel, WMColorListModeColorPanel); WMSetPickerMode(panel, WMColorListModeColorPanel);
else if (w == panel->grayBtn) else if (w == panel->grayBtn)
WMSetColorPanelPickerMode(panel, WMGrayModeColorPanel); WMSetPickerMode(panel, WMGrayModeColorPanel);
else if (w == panel->rgbBtn) else if (w == panel->rgbBtn)
WMSetColorPanelPickerMode(panel, WMRGBModeColorPanel); WMSetPickerMode(panel, WMRGBModeColorPanel);
else if (w == panel->cmykBtn) else if (w == panel->cmykBtn)
WMSetColorPanelPickerMode(panel, WMCMYKModeColorPanel); WMSetPickerMode(panel, WMCMYKModeColorPanel);
else if (w == panel->hsbBtn) else if (w == panel->hsbBtn)
WMSetColorPanelPickerMode(panel, WMHSBModeColorPanel); WMSetPickerMode(panel, WMHSBModeColorPanel);
} }
@@ -1481,6 +1425,7 @@ magnifyCreateView(W_ColorPanel *panel)
magView->attribs.save_under = True; magView->attribs.save_under = True;
W_RealizeView(magView); W_RealizeView(magView);
W_MapView(magView);
return magView; return magView;
} }
@@ -1492,7 +1437,7 @@ magnifyGrabPointer(W_ColorPanel *panel)
W_Screen *scr = WMWidgetScreen(panel->win); W_Screen *scr = WMWidgetScreen(panel->win);
Pixmap magPixmap, magPixmap2; Pixmap magPixmap, magPixmap2;
Cursor magCursor; Cursor magCursor;
XColor fgColor = {0, 0,0,0, DoRed|DoGreen|DoBlue}; XColor fgColor = {0, 0,0,0, DoRed|DoGreen|DoBlue};
XColor bgColor = {0, 0xbf00, 0xa000, 0x5000, DoRed|DoGreen|DoBlue}; XColor bgColor = {0, 0xbf00, 0xa000, 0x5000, DoRed|DoGreen|DoBlue};
/* Cursor creation stuff */ /* Cursor creation stuff */
@@ -1544,6 +1489,7 @@ magnifyInitialize(W_ColorPanel *panel)
panel->magnifyGlass->valid = True; panel->magnifyGlass->valid = True;
pixmap = magnifyCreatePixmap(panel); pixmap = magnifyCreatePixmap(panel);
W_MoveView(panel->magnifyGlass->view, x - Cursor_x_hot +1, y - Cursor_y_hot +1);
XSetWindowBackgroundPixmap(scr->display, panel->magnifyGlass->view->window, pixmap); XSetWindowBackgroundPixmap(scr->display, panel->magnifyGlass->view->window, pixmap);
XClearWindow(scr->display, panel->magnifyGlass->view->window); XClearWindow(scr->display, panel->magnifyGlass->view->window);
@@ -1577,16 +1523,14 @@ magnifyPutCursor(WMWidget *w, void *data)
/* Create magnifying glass */ /* Create magnifying glass */
panel->magnifyGlass = wmalloc(sizeof(MovingView)); panel->magnifyGlass = wmalloc(sizeof(MovingView));
panel->magnifyGlass->view = magnifyCreateView(panel); panel->magnifyGlass->view = magnifyCreateView(panel);
magCursor = magnifyGrabPointer(panel);
initialPosition = magnifyInitialize(panel); initialPosition = magnifyInitialize(panel);
x = initialPosition.x; x = initialPosition.x;
y = initialPosition.y; y = initialPosition.y;
W_MoveView(panel->magnifyGlass->view, x - Cursor_x_hot +1, y - Cursor_y_hot +1);
W_MapView(panel->magnifyGlass->view);
magCursor = magnifyGrabPointer(panel);
while(panel->magnifyGlass->valid) while(panel->magnifyGlass->valid)
{ {
@@ -1596,7 +1540,7 @@ magnifyPutCursor(WMWidget *w, void *data)
{ {
case ButtonPress: case ButtonPress:
if (event.xbutton.button == Button1) { if (event.xbutton.button == Button1) {
updateSwatch(panel, panel->magnifyGlass->color); WMSetColorPanelColor(panel, panel->magnifyGlass->color);
switch (panel->mode) { switch (panel->mode) {
case WMWheelModeColorPanel: case WMWheelModeColorPanel:
wheelInit(panel); wheelInit(panel);
@@ -1646,24 +1590,6 @@ magnifyPutCursor(WMWidget *w, void *data)
XFreePixmap(scr->display, pixmap); XFreePixmap(scr->display, pixmap);
break; break;
case FocusOut: /* fall through */
case FocusIn:
/*
* Color Panel window (panel->win) lost or received focus.
* We need to update the pixmap in the magnifying glass.
*/
XUngrabPointer(scr->display, CurrentTime);
W_UnmapView(panel->magnifyGlass->view);
magnifyInitialize(panel);
W_MapView(panel->magnifyGlass->view);
XGrabPointer (scr->display, panel->magnifyGlass->view->window, True,
PointerMotionMask | ButtonPressMask,
GrabModeAsync, GrabModeAsync,
scr->rootWin, magCursor, CurrentTime);
break;
default: default:
WMHandleEvent(&event); WMHandleEvent(&event);
break; break;
@@ -1959,10 +1885,6 @@ wheelHandleActionEvents(XEvent *event, void *data)
case ButtonRelease: case ButtonRelease:
panel->flags.dragging = 0; panel->flags.dragging = 0;
if (!panel->flags.continuous) {
if (panel->action)
(*panel->action)(panel->action, panel->clientData);
}
break; break;
case MotionNotify: case MotionNotify:
@@ -2057,7 +1979,7 @@ wheelUpdateSelection(W_ColorPanel *panel)
{ {
W_Screen *scr = WMWidgetScreen(panel->win); W_Screen *scr = WMWidgetScreen(panel->win);
updateSwatch(panel, panel->color); WMSetColorPanelColor(panel, panel->color);
panel->lastChanged = WMWheelModeColorPanel; panel->lastChanged = WMWheelModeColorPanel;
/* Redraw color selector (and make a backup of the part it will cover) */ /* Redraw color selector (and make a backup of the part it will cover) */
@@ -2200,7 +2122,7 @@ grayBrightnessSliderCallback(WMWidget *w, void *data)
WMSetTextFieldText(panel->grayBrightnessT, tmp); WMSetTextFieldText(panel->grayBrightnessT, tmp);
color.red = color.green = color.blue = rint(2.55*value); color.red = color.green = color.blue = rint(2.55*value);
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMGrayModeColorPanel; panel->lastChanged = WMGrayModeColorPanel;
} }
@@ -2228,7 +2150,7 @@ grayPresetButtonCallback(WMWidget *w, void *data)
WMSetSliderValue(panel->grayBrightnessS, rint(100.0*i/6.0)); WMSetSliderValue(panel->grayBrightnessS, rint(100.0*i/6.0));
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMGrayModeColorPanel; panel->lastChanged = WMGrayModeColorPanel;
} }
@@ -2251,7 +2173,7 @@ grayBrightnessTextFieldCallback(void *observerData, WMNotification *notification
WMSetSliderValue(panel->grayBrightnessS, value); WMSetSliderValue(panel->grayBrightnessS, value);
color.red = color.green = color.blue = rint(255.0*value/100.0); color.red = color.green = color.blue = rint(255.0*value/100.0);
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMGrayModeColorPanel; panel->lastChanged = WMGrayModeColorPanel;
} }
@@ -2281,7 +2203,7 @@ rgbSliderCallback(WMWidget *w, void *data)
color.green = value[1]; color.green = value[1];
color.blue = value[2]; color.blue = value[2];
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMRGBModeColorPanel; panel->lastChanged = WMRGBModeColorPanel;
} }
@@ -2320,7 +2242,7 @@ rgbTextFieldCallback(void *observerData, WMNotification *notification)
color.green = value[1]; color.green = value[1];
color.blue = value[2]; color.blue = value[2];
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMRGBModeColorPanel; panel->lastChanged = WMRGBModeColorPanel;
} }
@@ -2354,7 +2276,7 @@ cmykSliderCallback(WMWidget *w, void *data)
color.green = rint((255.0 - (value[1] * 2.55)) * (1.0 - (value[3] / 100.0))); color.green = rint((255.0 - (value[1] * 2.55)) * (1.0 - (value[3] / 100.0)));
color.blue = rint((255.0 - (value[2] * 2.55)) * (1.0 - (value[3] / 100.0))); color.blue = rint((255.0 - (value[2] * 2.55)) * (1.0 - (value[3] / 100.0)));
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMCMYKModeColorPanel; panel->lastChanged = WMCMYKModeColorPanel;
} }
@@ -2397,7 +2319,7 @@ cmykTextFieldCallback(void *observerData, WMNotification *notification)
color.green = rint((255.0 - (value[1] * 2.55)) * (1.0 - (value[3] / 100.0))); color.green = rint((255.0 - (value[1] * 2.55)) * (1.0 - (value[3] / 100.0)));
color.blue = rint((255.0 - (value[2] * 2.55)) * (1.0 - (value[3] / 100.0))); color.blue = rint((255.0 - (value[2] * 2.55)) * (1.0 - (value[3] / 100.0)));
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
panel->lastChanged = WMCMYKModeColorPanel; panel->lastChanged = WMCMYKModeColorPanel;
} }
@@ -2430,7 +2352,7 @@ hsbSliderCallback(WMWidget *w, void *data)
RHSVtoRGB(&panel->hsvcolor, &color); RHSVtoRGB(&panel->hsvcolor, &color);
panel->lastChanged = WMHSBModeColorPanel; panel->lastChanged = WMHSBModeColorPanel;
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
if (w != panel->hsbBrightnessS) if (w != panel->hsbBrightnessS)
hsbUpdateBrightnessGradient(panel); hsbUpdateBrightnessGradient(panel);
@@ -2483,7 +2405,7 @@ hsbTextFieldCallback(void *observerData, WMNotification *notification)
RHSVtoRGB(&panel->hsvcolor, &color); RHSVtoRGB(&panel->hsvcolor, &color);
panel->lastChanged = WMHSBModeColorPanel; panel->lastChanged = WMHSBModeColorPanel;
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
hsbUpdateBrightnessGradient(panel); hsbUpdateBrightnessGradient(panel);
hsbUpdateSaturationGradient(panel); hsbUpdateSaturationGradient(panel);
@@ -2509,7 +2431,7 @@ hsbUpdateBrightnessGradient(W_ColorPanel *panel)
sliderImg = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL); sliderImg = RRenderGradient(141, 16, &from, &to, RGRD_HORIZONTAL);
sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0); sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0);
RDestroyImage(sliderImg); RDestroyImage(sliderImg);
W_PaintText(W_VIEW(panel->hsbBrightnessS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scr->white), False, "Brightness", strlen("Brightness")); W_PaintText(W_VIEW(panel->hsbBrightnessS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scr->white), False, "Brightness", strlen("Brightness"));
WMSetSliderImage(panel->hsbBrightnessS, sliderPxmp); WMSetSliderImage(panel->hsbBrightnessS, sliderPxmp);
WMReleasePixmap(sliderPxmp); WMReleasePixmap(sliderPxmp);
} }
@@ -2535,9 +2457,9 @@ hsbUpdateSaturationGradient(W_ColorPanel *panel)
sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0); sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0);
RDestroyImage(sliderImg); RDestroyImage(sliderImg);
if (hsvcolor.value < 128) if (hsvcolor.value < 128)
W_PaintText(W_VIEW(panel->hsbSaturationS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scr->white), False, "Saturation", strlen("Saturation")); W_PaintText(W_VIEW(panel->hsbSaturationS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scr->white), False, "Saturation", strlen("Saturation"));
else else
W_PaintText(W_VIEW(panel->hsbSaturationS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scr->black), False, "Saturation", strlen("Saturation")); W_PaintText(W_VIEW(panel->hsbSaturationS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scr->black), False, "Saturation", strlen("Saturation"));
WMSetSliderImage(panel->hsbSaturationS, sliderPxmp); WMSetSliderImage(panel->hsbSaturationS, sliderPxmp);
WMReleasePixmap(sliderPxmp); WMReleasePixmap(sliderPxmp);
@@ -2567,9 +2489,9 @@ hsbUpdateHueGradient(W_ColorPanel *panel)
sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0); sliderPxmp = WMCreatePixmapFromRImage(scr, sliderImg, 0);
RDestroyImage(sliderImg); RDestroyImage(sliderImg);
if (hsvcolor.value < 128) if (hsvcolor.value < 128)
W_PaintText(W_VIEW(panel->hsbHueS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scr->white), False, "Hue", strlen("Hue")); W_PaintText(W_VIEW(panel->hsbHueS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scr->white), False, "Hue", strlen("Hue"));
else else
W_PaintText(W_VIEW(panel->hsbHueS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, WMColorGC(scr->black), False, "Hue", strlen("Hue")); W_PaintText(W_VIEW(panel->hsbHueS), sliderPxmp->pixmap, panel->font12, 2, 0, 100, WALeft, W_GC(scr->black), False, "Hue", strlen("Hue"));
WMSetSliderImage(panel->hsbHueS, sliderPxmp); WMSetSliderImage(panel->hsbHueS, sliderPxmp);
WMReleasePixmap(sliderPxmp); WMReleasePixmap(sliderPxmp);
@@ -2689,7 +2611,7 @@ customPalettePositionSelection(W_ColorPanel *panel, int x, int y)
panel->color.green = panel->customPaletteImg->data[1][ofs]; panel->color.green = panel->customPaletteImg->data[1][ofs];
panel->color.blue = panel->customPaletteImg->data[2][ofs]; panel->color.blue = panel->customPaletteImg->data[2][ofs];
updateSwatch(panel, panel->color); WMSetColorPanelColor(panel, panel->color);
panel->lastChanged = WMCustomPaletteModeColorPanel; panel->lastChanged = WMCustomPaletteModeColorPanel;
/* Redraw color selector (and make a backup of the part it will cover) */ /* Redraw color selector (and make a backup of the part it will cover) */
@@ -2747,10 +2669,6 @@ customPaletteHandleActionEvents(XEvent *event, void *data)
case ButtonRelease: case ButtonRelease:
panel->flags.dragging = 0; panel->flags.dragging = 0;
if (!panel->flags.continuous) {
if (panel->action)
(*panel->action)(panel->action, panel->clientData);
}
break; break;
case MotionNotify: case MotionNotify:
@@ -2815,7 +2733,7 @@ customPaletteMenuNewFromFile(W_ColorPanel *panel)
WMSetFilePanelCanChooseFiles(browseP, 1); WMSetFilePanelCanChooseFiles(browseP, 1);
/* Get a filename */ /* Get a filename */
if (WMRunModalFilePanelForDirectory(browseP, panel->win, spath, if (WMRunModalOpenPanelForDirectory(browseP, panel->win, spath,
"Open Palette", "Open Palette",
RSupportedFileFormats()) ) { RSupportedFileFormats()) ) {
filepath = WMGetFilePanelFileName(browseP); filepath = WMGetFilePanelFileName(browseP);
@@ -3197,7 +3115,7 @@ colorListSelect(WMWidget *w, void *data)
RColor color = *((RColor *)WMGetListSelectedItem(w)->clientData); RColor color = *((RColor *)WMGetListSelectedItem(w)->clientData);
panel->lastChanged = WMColorListModeColorPanel; panel->lastChanged = WMColorListModeColorPanel;
updateSwatch(panel, color); WMSetColorPanelColor(panel, color);
} }
@@ -3290,15 +3208,12 @@ generateNewFilename(char *curName)
char *ptr; char *ptr;
char *newName; char *newName;
assert(curName);
ptr = curName; ptr = curName;
if ( while ((ptr = strrchr(ptr, '{')) && !(sscanf(ptr, "{%i}%c", &n, &c)==1)) {
((ptr = strrchr(ptr, '{')) == 0) || ptr++;
sscanf(ptr, "{%i}%c", &n, &c) != 1 }
) if (!ptr)
return wstrappend(curName, " {1}"); return wstrappend(curName, " {1}");
baseLen = ptr - curName -1; baseLen = ptr - curName -1;

View File

@@ -613,13 +613,15 @@ updateImage(TexturePanel *panel, char *path)
} }
if (WMGetPopUpButtonSelectedItem(panel->typeP) == TYPE_PIXMAP) { if (WMGetPopUpButtonSelectedItem(panel->typeP) == TYPE_PIXMAP) {
pixmap = WMCreatePixmapFromRImage(scr, image, 128); if (image) {
pixmap = WMCreatePixmapFromRImage(scr, image, 128);
size = WMGetPixmapSize(pixmap); size = WMGetPixmapSize(pixmap);
WMSetLabelImage(panel->imageL, pixmap); WMSetLabelImage(panel->imageL, pixmap);
WMResizeWidget(panel->imageL, size.width, size.height); WMResizeWidget(panel->imageL, size.width, size.height);
WMReleasePixmap(pixmap); WMReleasePixmap(pixmap);
}
} else { } else {
updateTGradImage(panel); updateTGradImage(panel);
} }

View File

@@ -43,7 +43,7 @@
/****/ /****/
#define WVERSION "0.30" #define WVERSION "0.30"
#define WMVERSION "0.51.x" #define WMVERSION "0.52.x"
typedef struct _Panel Panel; typedef struct _Panel Panel;

View File

@@ -1405,7 +1405,8 @@ wHideApplication(WApplication *wapp)
wArrangeIcons(scr, True); wArrangeIcons(scr, True);
} }
#ifdef HIDDENDOT #ifdef HIDDENDOT
wAppIconPaint(wapp->app_icon); if (wapp->app_icon)
wAppIconPaint(wapp->app_icon);
#endif #endif
} }

View File

@@ -1702,11 +1702,20 @@ handleKeyPress(XEvent *event)
break; break;
#ifdef KEEP_XKB_LOCK_STATUS #ifdef KEEP_XKB_LOCK_STATUS
case WKBD_TOGGLE: case WKBD_TOGGLE:
if(wPreferences.modelock){ if(wPreferences.modelock) {
XkbGetState(dpy,XkbUseCoreKbd,&staterec); /*toggle*/
/*toggle*/ wwin = scr->focused_window;
XkbLockGroup(dpy,XkbUseCoreKbd,
wwin->frame->languagemode=staterec.compat_state&32?0:1); if (wwin && wwin->flags.mapped
&& wwin->frame->workspace == wwin->screen_ptr->current_workspace
&& !wwin->flags.miniaturized && !wwin->flags.hidden) {
XkbGetState(dpy,XkbUseCoreKbd,&staterec);
wwin->frame->languagemode = staterec.compat_state&32
? 0 : 1;
XkbLockGroup(dpy,XkbUseCoreKbd, wwin->frame->languagemode);
}
} }
break; break;
#endif /* KEEP_XKB_LOCK_STATUS */ #endif /* KEEP_XKB_LOCK_STATUS */

View File

@@ -75,8 +75,12 @@ appearanceObserver(void *self, WMNotification *notif)
if (flags & WColorSettings) { if (flags & WColorSettings) {
} }
*/ */
wIconPaint(icon);
/* so that the appicon expose handlers will paint the appicon specific
* stuff */
XClearArea(dpy, icon->core->window, 0, 0, 1, 1, True); XClearArea(dpy, icon->core->window, 0, 0, 1, 1, True);
/* wIconPaint(icon);*/
} }
@@ -86,8 +90,9 @@ tileObserver(void *self, WMNotification *notif)
WIcon *icon = (WIcon*)self; WIcon *icon = (WIcon*)self;
icon->force_paint = 1; icon->force_paint = 1;
wIconPaint(icon);
XClearArea(dpy, icon->core->window, 0, 0, 1, 1, True); XClearArea(dpy, icon->core->window, 0, 0, 1, 1, True);
/* wIconPaint(icon);*/
} }
/************************************/ /************************************/

166
src/kwm.c
View File

@@ -24,6 +24,9 @@
* *
* Supported stuff: * Supported stuff:
* ================ * ================
*
* kfm icon selection from krootbgwm
*
* kwm.h function/method Notes * kwm.h function/method Notes
*---------------------------------------------------------------------------- *----------------------------------------------------------------------------
* setUnsavedDataHint() currently, only gives visual clue that * setUnsavedDataHint() currently, only gives visual clue that
@@ -115,6 +118,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <signal.h>
#include "WindowMaker.h" #include "WindowMaker.h"
@@ -130,6 +139,7 @@
#include "actions.h" #include "actions.h"
#include "workspace.h" #include "workspace.h"
#include "dialog.h" #include "dialog.h"
#include "stacking.h"
#include "kwm.h" #include "kwm.h"
@@ -1636,16 +1646,30 @@ wKWMSendEventMessage(WWindow *wwin, WKWMEventMessage message)
sendToModules(wwin ? wwin->screen_ptr : NULL, msg, wwin, 0); sendToModules(wwin ? wwin->screen_ptr : NULL, msg, wwin, 0);
} }
#if 0
static void static void
writeSocket(int sock, char *data)
{
char buffer[128];
sprintf(buffer, "%i ", strlen(data));
write(sock, buffer, strlen(buffer));
write(sock, data, strlen(data));
}
static int
connectKFM(WScreen *scr) connectKFM(WScreen *scr)
{ {
char *pidf; char *path;
char buffer[128]; char buffer[128];
char *ptr; char *ptr;
FILE *f; FILE *f;
int pid;
pidf = wstrappend(whomedir(), "/.kde/share/apps/kfm/pid"); int sock = 0;
struct sockaddr_un addr;
path = wstrappend(wgethomedir(), "/.kde/share/apps/kfm/pid");
strcpy(buffer, getenv("DISPLAY")); strcpy(buffer, getenv("DISPLAY"));
ptr = strchr(buffer, ':'); ptr = strchr(buffer, ':');
@@ -1661,98 +1685,80 @@ connectKFM(WScreen *scr)
sprintf(b, ".%i", scr->screen); sprintf(b, ".%i", scr->screen);
strcat(buffer, b); strcat(buffer, b);
} }
ptr = pidf; ptr = path;
pidf = wstrappend(ptr, buffer); path = wstrappend(ptr, buffer);
free(ptr); free(ptr);
/* pid file */ /* pid file */
f = fopen(pidf, "r"); f = fopen(path, "r");
free(path);
char buffer[ 1024 ]; if (!f)
return -1;
buffer[0] = 0; buffer[0] = 0;
fgets( buffer, 1023, f ); fgets(buffer, 123, f);
int pid = atoi( buffer ); pid = atoi(buffer);
if ( pid <= 0 ) if (pid <= 0)
{ return -1;
warning("ERROR: Invalid PID");
fclose( f );
return;
}
// Is the PID ok ? if (kill(pid, 0) != 0)
if ( kill( pid, 0 ) != 0 ) return -1;
{
// Did we already try to start a new kfm ?
if ( flag == 0 && allowRestart )
{
flag = 1;
// Try to start a new kfm
system( "kfm -d &" );
sleep( 10 );
fclose( f );
init();
return;
}
warning("ERROR: KFM crashed");
fclose( f );
return;
}
// Read the socket's name
buffer[0] = 0; buffer[0] = 0;
fscanf(f, "%s", buffer); fscanf(f, "%s", buffer);
fclose( f ); fclose(f);
char * slot = strdup( buffer );
if ( slot == (void *) 0 )
{
warning("ERROR: Invalid Slot");
return;
}
// Connect to KFM
ipc = new KfmIpc( slot );
free(slot);
connect( ipc, SIGNAL( finished() ), this, SLOT( slotFinished() ) ); sock = socket(AF_UNIX, SOCK_STREAM, 0);
connect( ipc, SIGNAL( error( int, const char* ) ), if (sock < 0)
this, SLOT( slotError( int, const char* ) ) ); return -1;
connect( ipc, SIGNAL( dirEntry( const char*, const char*, const char*, const char*, const char*, int ) ), addr.sun_family = AF_UNIX;
this, SLOT( slotDirEntry( const char*, const char*, const char*, const char*, const char*, int ) ) ); strcpy(addr.sun_path, buffer);
// Read the password if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
QString fn = KApplication::localkdedir() + "/share/apps/kfm/magic"; close(sock);
f = fopen( fn.data(), "rb" ); return -1;
if ( f == 0L )
{
QString ErrorMessage;
ksprintf(&ErrorMessage, i18n("You dont have the file %s\n"
"Could not do Authorization"), fn.data());
QMessageBox::message( i18n("KFM Error"), ErrorMessage );
return;
}
char *p = fgets( buffer, 1023, f );
fclose( f );
if ( p == 0L )
{
QString ErrorMessage;
ksprintf(&ErrorMessage, i18n("The file %s is corrupted\n"
"Could not do Authorization"), fn.data());
QMessageBox::message( i18n("KFM Error"), ErrorMessage );
return;
} }
ipc->auth( buffer ); path = wstrappend(wgethomedir(), "/.kde/share/apps/kfm/magic");
f = fopen(path, "r");
ok = TRUE; if (!f) {
return -1;
}
ptr = fgets(buffer, 123, f);
fclose(f);
if (!ptr) {
return -1;
}
puts(buffer);
ptr = wstrappend("auth", buffer);
writeSocket(sock, ptr);
free(ptr);
return sock;
} }
void void
wKWMSendRootSelection(WScreen *scr, int x, int y, int w, int h, Bool control) wKWMSelectRootRegion(WScreen *scr, int x, int y, int w, int h, Bool control)
{ {
char buffer[128];
int sock;
puts("CONNECTING");
sock = connectKFM(scr);
if (sock < 0)
return;
puts("SENDING DATA");
writeSocket(sock, "refreshDesktop");
sprintf(buffer, "selectRootIcons %i %i %i %i %c", x, y, w, h, control);
writeSocket(sock, buffer);
close(sock);
} }
#endif
#endif /* KWM_HINTS */ #endif /* KWM_HINTS */

View File

@@ -95,5 +95,8 @@ char *wKWMGetWorkspaceName(WScreen *scr, int workspace);
Bool wKWMGetIconGeometry(WWindow *wwin, WArea *area); Bool wKWMGetIconGeometry(WWindow *wwin, WArea *area);
void wKWMSelectRootRegion(WScreen *scr, int x, int y, int w, int h,
Bool control);
#endif #endif

View File

@@ -41,6 +41,10 @@
#include "list.h" #include "list.h"
#ifdef KWM_HINTS
#include "kwm.h"
#endif
/* How many different types of geometry/position /* How many different types of geometry/position
display thingies are there? */ display thingies are there? */
#define NUM_DISPLAYS 4 #define NUM_DISPLAYS 4
@@ -1395,24 +1399,30 @@ wKeyboardMoveResizeWindow(WWindow *wwin)
XUngrabKeyboard(dpy, CurrentTime); XUngrabKeyboard(dpy, CurrentTime);
XUngrabPointer(dpy, CurrentTime); XUngrabPointer(dpy, CurrentTime);
XUngrabServer(dpy); XUngrabServer(dpy);
if(done==2){
if(done==2) {
if (wwin->flags.shaded || scr->selected_windows) { if (wwin->flags.shaded || scr->selected_windows) {
LinkedList *list; LinkedList *list;
list=scr->selected_windows; list=scr->selected_windows;
if(!scr->selected_windows){ if (!scr->selected_windows) {
wWindowMove(wwin, src_x+off_x, src_y+off_y); wWindowMove(wwin, src_x+off_x, src_y+off_y);
wWindowSynthConfigureNotify(wwin); wWindowSynthConfigureNotify(wwin);
} else {
doWindowMove(wwin,scr->selected_windows,off_x,off_y);
while (list) {
wWindowSynthConfigureNotify(list->head);
list = list->tail;
}
} }
else { } else {
doWindowMove(wwin,scr->selected_windows,off_x,off_y); if (wwin->client.width != ww)
while (list) { wwin->flags.user_changed_width = 1;
wWindowSynthConfigureNotify(list->head);
list = list->tail; if (wwin->client.height != wh - vert_border)
} wwin->flags.user_changed_height = 1;
}
} wWindowConfigure(wwin, src_x+off_x, src_y+off_y,
else { ww, wh - vert_border);
wWindowConfigure(wwin, src_x+off_x, src_y+off_y, ww, wh - vert_border);
wWindowSynthConfigureNotify(wwin); wWindowSynthConfigureNotify(wwin);
} }
wWindowChangeWorkspace(wwin, scr->current_workspace); wWindowChangeWorkspace(wwin, scr->current_workspace);
@@ -1530,10 +1540,11 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev)
if (!warped && !wPreferences.no_autowrap) { if (!warped && !wPreferences.no_autowrap) {
int oldWorkspace = scr->current_workspace; int oldWorkspace = scr->current_workspace;
drawFrames(wwin, scr->selected_windows, if (!opaqueMove) {
moveData.realX - wwin->frame_x, drawFrames(wwin, scr->selected_windows,
moveData.realY - wwin->frame_y); moveData.realX - wwin->frame_x,
moveData.realY - wwin->frame_y);
}
if (checkWorkspaceChange(wwin, &moveData, opaqueMove)) { if (checkWorkspaceChange(wwin, &moveData, opaqueMove)) {
if (scr->current_workspace != oldWorkspace if (scr->current_workspace != oldWorkspace
&& wPreferences.edge_resistance > 0 && wPreferences.edge_resistance > 0
@@ -1542,9 +1553,11 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev)
warped = 1; warped = 1;
} }
drawFrames(wwin, scr->selected_windows, if (!opaqueMove) {
moveData.realX - wwin->frame_x, drawFrames(wwin, scr->selected_windows,
moveData.realY - wwin->frame_y); moveData.realX - wwin->frame_x,
moveData.realY - wwin->frame_y);
}
} else { } else {
warped = 0; warped = 0;
} }
@@ -1859,12 +1872,19 @@ wMouseResizeWindow(WWindow *wwin, XEvent *ev)
if (started) { if (started) {
showGeometry(wwin, fx, fy, fx + fw, fy + fh, res); showGeometry(wwin, fx, fy, fx + fw, fy + fh, res);
drawTransparentFrame(wwin, fx, fy, fw, fh); drawTransparentFrame(wwin, fx, fy, fw, fh);
XUngrabKeyboard(dpy, CurrentTime); XUngrabKeyboard(dpy, CurrentTime);
unmapGeometryDisplay(wwin); unmapGeometryDisplay(wwin);
XUngrabServer(dpy); XUngrabServer(dpy);
if (wwin->client.width != fw)
wwin->flags.user_changed_width = 1;
if (wwin->client.height != fh - vert_border)
wwin->flags.user_changed_height = 1;
wWindowConfigure(wwin, fx, fy, fw, fh - vert_border); wWindowConfigure(wwin, fx, fy, fw, fh - vert_border);
} }
#ifdef DEBUG #ifdef DEBUG
@@ -1984,6 +2004,12 @@ wSelectWindows(WScreen *scr, XEvent *ev)
XUngrabServer(dpy); XUngrabServer(dpy);
XUngrabPointer(dpy, CurrentTime); XUngrabPointer(dpy, CurrentTime);
selectWindowsInside(scr, x, y, x + w, y + h); selectWindowsInside(scr, x, y, x + w, y + h);
#ifdef KWM_HINTS
wKWMSelectRootRegion(scr, x, y, w, h,
event.xbutton.state & ControlMask);
#endif /* KWM_HINTS */
#ifdef DEBUG #ifdef DEBUG
puts("End window selection"); puts("End window selection");
#endif #endif

View File

@@ -682,15 +682,35 @@ wSessionSendSaveYourself(WScreen *scr)
*/ */
static char*
getWindowRole(Window window)
{
XTextProperty prop;
static Atom atom = 0;
if (!atom)
atom = XInternAtom(dpy, "WM_WINDOW_ROLE", False);
if (XGetTextProperty(dpy, window, &prop, atom)) {
if (prop.encoding == XA_STRING && prop.format == 8 && prop.nitems > 0)
return prop.value;
}
return NULL;
}
/* /*
* Windows are identified as:
* WM_CLASS(instance.class).WM_WINDOW_ROLE
* *
* Saved Info: * Saved Info:
* *
* WM_CLASS.instance
* WM_CLASSS.class
* WM_WINDOW_ROLE * WM_WINDOW_ROLE
*
* WM_CLASS.instance
* WM_CLASS.class
* WM_NAME
* WM_COMMAND
*
* geometry * geometry
* state = (miniaturized, shaded, etc) * state = (miniaturized, shaded, etc)
* attribute * attribute
@@ -736,6 +756,64 @@ makeAppState(WWindow *wwin)
} }
Bool
wSessionGetStateFor(WWindow *wwin, WSessionData *state)
{
char *str;
proplist_t slist;
proplist_t elem;
proplist_t value;
int index = 0;
index = 3;
/* geometry */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
sscanf(str, "%i %i %i %i %i %i", &state->x, &state->y,
&state->width, &state->height,
&state->user_changed_width, &state->user_changed_height);
/* state */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
sscanf(str, "%i %i %i", &state->miniaturized, &state->shaded,
&state->maximized);
/* attributes */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
getAttributeState(str, &state->mflags, &state->flags);
/* workspace */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
sscanf(str, "%i", &state->workspace);
/* app state (repeated for all windows of the app) */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
/* ???? */
/* shortcuts */
value = PLGetArrayElement(slist, index++);
str = PLGetString(value);
sscanf(str, "%i", &state->shortcuts);
}
static proplist_t static proplist_t
makeAttributeState(WWindow *wwin) makeAttributeState(WWindow *wwin)
{ {
@@ -745,7 +823,8 @@ makeAttributeState(WWindow *wwin)
#define W_FLAG(wwin, FLAG) ((wwin)->defined_user_flags.FLAG \ #define W_FLAG(wwin, FLAG) ((wwin)->defined_user_flags.FLAG \
? (wwin)->user_flags.FLAG : -1) ? (wwin)->user_flags.FLAG : -1)
sprintf(buffer, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", sprintf(buffer,
"%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
W_FLAG(no_titlebar), W_FLAG(no_titlebar),
W_FLAG(no_resizable), W_FLAG(no_resizable),
W_FLAG(no_closable), W_FLAG(no_closable),
@@ -779,6 +858,17 @@ makeAttributeState(WWindow *wwin)
} }
static void
appendStringInArray(proplist_t array, char *str)
{
proplist_t val;
val = PLMakeString(str);
PLAppendArrayElement(array, val);
PLRelease(val);
}
static proplist_t static proplist_t
makeClientState(WWindow *wwin) makeClientState(WWindow *wwin)
{ {
@@ -787,47 +877,62 @@ makeClientState(WWindow *wwin)
char *str; char *str;
char buffer[256]; char buffer[256];
int i; int i;
unsigned shortcuts;
state = PLMakeArrayWithElements(NULL, NULL); state = PLMakeArrayWithElements(NULL, NULL);
/* spec */ /* WM_WINDOW_ROLE */
PLAppendArrayElement(state, PLMakeString(wwin->wm_instance)); str = getWindowRole(wwin->client_win);
PLAppendArrayElement(state, PLMakeString(wwin->wm_class)); if (!str)
appendStringInArray(state, "");
else {
appendStringInArray(state, str);
XFree(str);
}
PLAppendArrayElement(state, PLMakeString(str)); /* WM_CLASS.instance */
appendStringInArray(state, wwin->wm_instance);
/* WM_CLASS.class */
appendStringInArray(state, wwin->wm_class);
/* WM_NAME */
/* geometry */ /* geometry */
sprintf(buffer, "%i %i %i %i", wwin->frame_x, wwin->frame_y, sprintf(buffer, "%i %i %i %i %i %i", wwin->frame_x, wwin->frame_y,
wwin->frame->core->width, wwin->frame->core->height); wwin->client.width, wwin->client.height,
PLAppendArrayElement(state, PLMakeString(buffer)); wwin->flags.user_changed_width, wwin->flags.user_changed_height);
appendStringInArray(state, buffer);
/* state */ /* state */
sprintf(buffer, "%i %i %i", wwin->flags.miniaturized, sprintf(buffer, "%i %i %i", wwin->flags.miniaturized,
wwin->flags.shaded, wwin->flags.maximized); wwin->flags.shaded, wwin->flags.maximized);
PLAppendArrayElement(state, PLMakeString(buffer)); appendStringInArray(state, buffer);
/* attributes */ /* attributes */
PLAppendArrayElement(state, makeAttributeState(wwin)); tmp = makeAttributeState(wwin);
PLAppendArrayElement(state, tmp);
PLRelease(tmp);
/* workspace */ /* workspace */
sprintf(buffer, "%i", wwin->frame->workspace); sprintf(buffer, "%i", wwin->frame->workspace);
PLAppendArrayElement(state, PLMakeString(buffer)); appendStringInArray(state, buffer);
/* app state (repeated for all windows of the app) */ /* app state (repeated for all windows of the app) */
PLAppendArrayElement(state, makeAppState(wwin)); tmp = makeAppState(wwin);
PLAppendArrayElement(state, tmp);
PLRelease(tmp);
/* shortcuts */ /* shortcuts */
tmp = PLMakeArrayWithElements(NULL, NULL); shortcuts = 0;
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
if (scr->shortcutWindow[i] == wwin) { if (scr->shortcutWindow[i] == wwin) {
shortcuts |= 1 << i;
sprintf(buffer, "%i", i);
PLAppendArrayElement(tmp, PLMakeString(buffer));
} }
} }
PLAppendArrayElement(state, tmp); sprintf(buffer, "%ui", shortcuts);
appendStringInArray(tmp, buffer);
return state; return state;
} }

View File

@@ -23,6 +23,28 @@
#ifndef WMSESSION_H_ #ifndef WMSESSION_H_
#define WMSESSION_H_ #define WMSESSION_H_
typedef struct {
int x;
int y;
unsigned int w; /* client size */
unsigned int h;
int workspace;
unsigned shortcuts; /* mask like 1<<shortcut_number */
WWindowAttributes mflags;
WWindowAttributes flags;
char miniaturized;
char shaded;
char maximized;
char user_changed_width;
char user_changed_height;
} WSessionData;
void wSessionSaveState(WScreen *scr); void wSessionSaveState(WScreen *scr);
void wSessionSaveClients(WScreen *scr); void wSessionSaveClients(WScreen *scr);

View File

@@ -447,14 +447,14 @@ wDefaultGetStartWorkspace(WScreen *scr, char *instance, char *class)
if (!tmp || strlen(tmp)==0) if (!tmp || strlen(tmp)==0)
return -1; return -1;
if (sscanf(tmp, "%i", &w)!=1) { if (sscanf(tmp, "%i", &w)!=1) {
w = -1; w = -1;
for (i=0; i < scr->workspace_count; i++) { for (i=0; i < scr->workspace_count; i++) {
if (strcmp(scr->workspaces[i]->name, tmp)==0) { if (strcmp(scr->workspaces[i]->name, tmp)==0) {
w = i; w = i;
break; break;
} }
} }
} else { } else {
w--; w--;

View File

@@ -268,6 +268,10 @@ typedef struct WWindow {
unsigned int obscured:1; /* window is obscured */ unsigned int obscured:1; /* window is obscured */
unsigned int dragged_while_fmaximized; unsigned int dragged_while_fmaximized;
unsigned int user_changed_width:1;
unsigned int user_changed_height:1;
#ifdef KWM_HINTS #ifdef KWM_HINTS
unsigned int kwm_hidden_for_modules:1; unsigned int kwm_hidden_for_modules:1;
unsigned int kwm_managed:1; unsigned int kwm_managed:1;

View File

@@ -1295,7 +1295,7 @@ createInspectorForWindow(WWindow *wwin)
i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance, i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance,
wwin->wm_class); wwin->wm_class);
if (i >= 0 && i <= wwin->screen_ptr->workspace_count) { if (i >= 0 && i <= wwin->screen_ptr->workspace_count) {
WMSetPopUpButtonSelectedItem(panel->wsP, i); WMSetPopUpButtonSelectedItem(panel->wsP, i + 1);
} else { } else {
WMSetPopUpButtonSelectedItem(panel->wsP, 0); WMSetPopUpButtonSelectedItem(panel->wsP, 0);
} }