summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKensuke Matsuzaki <zakki@peppermint.jp>2011-07-23 16:48:21 +0100
committerJon TURNEY <jon.turney@dronecode.org.uk>2011-11-09 18:20:23 +0000
commit5c9366f4f00014baa6ae10ce79ebec0bf0364830 (patch)
tree02f3cf5c4a18779c66dff01460d77000b97d9099
parent870fb3ecb9ac84ed3479abed675c64fa342d1a4c (diff)
xwinwm-0.0.3
-rw-r--r--ChangeLog15
-rw-r--r--README9
-rw-r--r--TODO10
-rw-r--r--nls/Makefile.am7
-rw-r--r--src/Screen.cc6
-rw-r--r--src/Window.cc229
-rw-r--r--src/Window.hh12
-rw-r--r--src/Workspace.cc14
-rw-r--r--src/blackbox.cc.in10
-rw-r--r--src/blackbox.hh10
10 files changed, 136 insertions, 186 deletions
diff --git a/ChangeLog b/ChangeLog
index 2270a74..ec6e386 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,21 @@
+2004-01-16 Kensuke Matsuzaki <zakki@peppermint.jp>
+
+ * src/Window.cc: direct call ShowWindow
+
+2004-01-06 Kensuke Matsuzaki <zakki@peppermint.jp>
+
+ * Window.cc, Screen.cc, blackbox.cc.in : improve minimize(iconify)/restore handling.
+
+2003-12-29 Kensuke Matsuzaki <zakki@peppermint.jp>
+
+ * Delete code related stick and shade.
+
+ * confiqure.in: Enable shape extention.
+
Changes from blackbox to hackedbox:
- added two configure options "--enable-bg-utils and --enable-bloat"
- Made all the neccesary hacks to make it "hackedbox" :-)
+
Changes from hackedbox to hackedbox for win:
- deleted window decoration and menu
- add Windows rootless window management extension
diff --git a/README b/README
index 5e5f5ca..01c66ca 100644
--- a/README
+++ b/README
@@ -1,6 +1,11 @@
--- README for XWinWM 0.8.x --
+-- README for XWinWM 0.0.x --
-This is the README for XWinWM 0.8.x release.
+This is the README for XWinWM 0.0.x release.
+
+XWinWM is a window manager for Cygwin/X's rootless mode.
+XWinWM is based on Hackedbox.
+
+WindowsWM extension is needed.
-- README for HackedBox 0.8.x --
diff --git a/TODO b/TODO
index 837694f..9efbbe0 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,16 @@
-- TODO
* Write documents
* Delete unused code
-* Implement minimize(iconify)
+* Implement minimize(iconify) <- OK?
* Clean up nls
+* Window position and gravity
+* ICCCM and EWMH compliance
+* MS-IME to XIM/iiimf/uim bridge
+* Alpha blending with RENDER extention and Layered window <-- Cygwin/X side
+* Large cursor with Xcursor
+* Customizable menu
+* Port some feture to -multiwindow mode
+
-- TODO for Blackbox - an X11 Window manager
diff --git a/nls/Makefile.am b/nls/Makefile.am
index f6b56c6..fa7372a 100644
--- a/nls/Makefile.am
+++ b/nls/Makefile.am
@@ -1,9 +1,10 @@
# nls/Makefile.am for Blackbox - an X11 Window Manager
NLSTEST = @NLS@
-SUBDIRS = C da_DK de_DE es_AR es_ES et_EE fr_FR hu_HU it_IT ja_JP ko_KR nl_NL \
- no_NO pl_PL pt_BR ro_RO ru_RU sk_SK sl_SI sv_SE tr_TR uk_UA \
- zh_CN zh_TW
+SUBDIRS = C
+# da_DK de_DE es_AR es_ES et_EE fr_FR hu_HU it_IT ja_JP ko_KR nl_NL \
+# no_NO pl_PL pt_BR ro_RO ru_RU sk_SK sl_SI sv_SE tr_TR uk_UA \
+# zh_CN zh_TW
MAINTAINERCLEANFILES = Makefile.in blackbox-nls.hh
DISTCLEANFILES = blackbox-nls.hh
diff --git a/src/Screen.cc b/src/Screen.cc
index 144da2b..f0baa4e 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -426,7 +426,7 @@ void BScreen::changeWorkspaceID(unsigned int id) {
#ifdef ADD_BLOAT
toolbar->redrawWorkspaceLabel(True);
#endif // ADD_BLOAT
-
+
updateNetizenCurrentWorkspace();
}
@@ -617,7 +617,7 @@ const string BScreen::getNameOfWorkspace(unsigned int id) {
void BScreen::reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id,
- bool ignore_sticky) {
+ bool /*ignore_sticky*/) {
if (! w) return;
if (wkspc_id == BSENTINEL)
@@ -629,7 +629,7 @@ void BScreen::reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id,
if (w->isIconic()) {
removeIcon(w);
getWorkspace(wkspc_id)->addWindow(w);
- } else if (ignore_sticky || ! w->isStuck()) {
+ } else {
getWorkspace(w->getWorkspaceNumber())->removeWindow(w);
getWorkspace(wkspc_id)->addWindow(w);
}
diff --git a/src/Window.cc b/src/Window.cc
index d1db058..fb3acde 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -59,6 +59,20 @@ extern "C" {
#include "Window.hh"
#include "Workspace.hh"
+/* Fixups to prevent collisions between Windows and X headers */
+#undef MINSHORT
+#undef MAXSHORT
+#define BOOL WIN_BOOL
+#define INT32 WIN_INT32
+
+/* Flags for Windows header options */
+#define NONAMELESSUNION
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+
+#include <windows.h>
+
/*
* Initializes the class with default values/the window's set initial values.
@@ -110,8 +124,8 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
XChangeWindowAttributes(blackbox->getXDisplay(), client.window,
CWEventMask|CWDontPropagate, &attrib_set);
- flags.moving = flags.resizing = flags.shaded = flags.visible =
- flags.iconic = flags.focused = flags.stuck = flags.modal =
+ flags.moving = flags.resizing = flags.visible =
+ flags.iconic = flags.focused = flags.modal =
flags.send_focus_message = flags.shaped = False;
flags.maximized = 0;
@@ -173,7 +187,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
getWMClass();
XChangeProperty(blackbox->getXDisplay(), frame.window,
- blackbox->WindowsWMClientWindow(),
+ blackbox->getWindowsWMClientWindow(),
XA_INTEGER, 32,
PropModeReplace, (unsigned char *) &client.window, 1);
@@ -267,25 +281,6 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
if (! getState())
current_state = initial_state;
- // the following flags are set by blackbox native apps only
- if (flags.shaded) {
- flags.shaded = False;
- initial_state = current_state;
- shade();
-
- /*
- At this point in the life of a window, current_state should only be set
- to IconicState if the window was an *icon*, not if it was shaded.
- */
- if (initial_state != IconicState)
- current_state = NormalState;
- }
-
- if (flags.stuck) {
- flags.stuck = False;
- stick();
- }
-
if (flags.maximized && (functions & Func_Maximize))
remaximize();
}
@@ -455,23 +450,40 @@ void BlackboxWindow::decorate(void) {
} else {
frame_style &= ~WindowsWMFrameStyleSizeBox;
}
+
+ short fx, fy, fw, fh;
+ XWindowsWMFrameGetRect(blackbox->getXDisplay(),
+ frame_style, frame_style_ex, 0,
+ frame.rect.x(), frame.rect.y(),
+ frame.rect.width(), frame.rect.height(),
+ &fx, &fy, &fw, &fh);
+
+#ifdef DEBUG
+ fprintf(stderr, "XWindowsWMFrameGetRect %d %d %d %d - %d %d %d %d\n",
+ frame.rect.x(), frame.rect.y(),
+ frame.rect.width(), frame.rect.height(),
+ fx, fy, fw, fh);
+#endif
+ if (fx < 0 || fy < 0)
+ frame.rect.setPos(frame.rect.x()*2 - fx, frame.rect.y()*2 - fy);
+
XWindowsWMFrameDraw(blackbox->getXDisplay(), 0, frame.window,
frame_style,
frame_style_ex,
- client.rect.x(), client.rect.y(),
- client.rect.width(), client.rect.height());
+ frame.rect.x(), frame.rect.y(),
+ frame.rect.width(), frame.rect.height());
XSetWindowBorder(blackbox->getXDisplay(), frame.window,
screen->getBorderColor()->pixel());
int prop = 1;
XChangeProperty(blackbox->getXDisplay(), frame.window,
- blackbox->WindowsWMRaiseOnClick(),
+ blackbox->getWindowsWMRaiseOnClick(),
XA_INTEGER, 32,
PropModeReplace, (unsigned char *) &prop, 1);
XChangeProperty(blackbox->getXDisplay(), frame.window,
- blackbox->WindowsWMMouseActivate(),
+ blackbox->getWindowsWMMouseActivate(),
XA_INTEGER, 32,
PropModeReplace, (unsigned char *) &prop, 1);
}
@@ -598,8 +610,8 @@ void BlackboxWindow::positionWindows(void) {
#if 1
//FIXME: Get Windows window's rect and use it.
XMoveResizeWindow(blackbox->getXDisplay(), frame.window,
- client.rect.x(), client.rect.y(), client.rect.width(),
- (flags.shaded) ? 0 : client.rect.height());
+ frame.rect.x(), frame.rect.y(),
+ frame.rect.width(), frame.rect.height());
XSetWindowBorderWidth(blackbox->getXDisplay(), frame.window, 0);
XMoveResizeWindow(blackbox->getXDisplay(), client.window,
0, 0, client.rect.width(), client.rect.height());
@@ -955,8 +967,8 @@ bool BlackboxWindow::getBlackboxHints(void) {
if (ret != Success || ! blackbox_hint || num != PropBlackboxHintsElements)
return False;
- if (blackbox_hint->flags & AttribShaded)
- flags.shaded = (blackbox_hint->attrib & AttribShaded);
+ // if (blackbox_hint->flags & AttribShaded)
+ // flags.shaded = (blackbox_hint->attrib & AttribShaded);
if ((blackbox_hint->flags & AttribMaxHoriz) &&
(blackbox_hint->flags & AttribMaxVert))
@@ -967,9 +979,6 @@ bool BlackboxWindow::getBlackboxHints(void) {
else if (blackbox_hint->flags & AttribMaxHoriz)
flags.maximized = (blackbox_hint->attrib & AttribMaxHoriz) ? 3 : 0;
- if (blackbox_hint->flags & AttribOmnipresent)
- flags.stuck = (blackbox_hint->attrib & AttribOmnipresent);
-
if (blackbox_hint->flags & AttribWorkspace)
blackbox_attrib.workspace = blackbox_hint->workspace;
@@ -1075,7 +1084,6 @@ void BlackboxWindow::getTransientInfo(void) {
if (client.transient_for) {
// register ourselves with our new transient_for
client.transient_for->client.transientList.push_back(this);
- flags.stuck = client.transient_for->flags.stuck;
}
}
@@ -1116,7 +1124,7 @@ void BlackboxWindow::configure(int dx, int dy,
frame.rect.width(), frame.rect.height(),
fx, fy, fw, fh);
#endif
- if (fx < 0 || fy <= 0)
+ if (fx < 0 || fy < 0)
frame.rect.setPos(frame.rect.x() - fx, frame.rect.y() - fy);
#endif
client.rect.setCoords(frame.rect.left(),
@@ -1284,8 +1292,7 @@ bool BlackboxWindow::setInputFocus(void) {
if (! validateClient()) return False;
assert(! flags.iconic &&
- (flags.stuck || // window must be on the current workspace or sticky
- blackbox_attrib.workspace == screen->getCurrentWorkspaceID()));
+ (blackbox_attrib.workspace == screen->getCurrentWorkspaceID()));
if (! frame.rect.intersects(screen->getRect())) {
// client is outside the screen, move it to the center
@@ -1358,7 +1365,30 @@ void BlackboxWindow::iconify(void) {
* unmap the frame window first, so when all the transients are
* unmapped, we don't get an enter event in sloppy focus mode
*/
- XUnmapWindow(blackbox->getXDisplay(), frame.window);
+ //XWindowsWMFrameShowWindow (blackbox->getXDisplay(), 0, frame.window,
+ //WindowsWMFrameSWMinimize);
+ //XUnmapWindow(blackbox->getXDisplay(), frame.window);
+ Atom atom_return;
+ int format;
+ unsigned long ulfoo, nitems;
+ HWND *phWnd;
+
+ if ((XGetWindowProperty (blackbox->getXDisplay(), frame.window,
+ blackbox->getWindowsWMNativeHWnd(),
+ 0l, 1l, False, XA_INTEGER,
+ &atom_return, &format, &nitems, &ulfoo,
+ (unsigned char **) &phWnd) == Success)
+ && phWnd)
+ {
+ if (*phWnd) ShowWindow (*phWnd, SW_MINIMIZE);
+ }
+ else
+ {
+ printf ("XGetWindowProperty failed. %d %d %d %d %d\n",
+ atom_return, format, nitems, ulfoo, phWnd);
+ }
+ XFree (phWnd);
+
flags.visible = False;
flags.iconic = True;
@@ -1377,8 +1407,8 @@ void BlackboxWindow::iconify(void) {
* of them (since they are above their transient_for) for a split
* second
*/
- screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this);
- screen->addIcon(this);
+ //screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this);
+ //screen->addIcon(this);
/*
* we don't want this XUnmapWindow call to generate an UnmapNotify event, so
@@ -1399,7 +1429,7 @@ void BlackboxWindow::iconify(void) {
void BlackboxWindow::show(void) {
- current_state = (flags.shaded) ? IconicState : NormalState;
+ current_state = NormalState;
setState(current_state);
XMapWindow(blackbox->getXDisplay(), client.window);
@@ -1540,12 +1570,6 @@ void BlackboxWindow::maximize(unsigned int /*button*/) {
constrain(TopLeft);
- if (flags.shaded) {
- blackbox_attrib.flags ^= AttribShaded;
- blackbox_attrib.attrib ^= AttribShaded;
- flags.shaded = False;
- }
-
flags.maximized = button;
configure(frame.changing.x(), frame.changing.y(),
@@ -1605,65 +1629,6 @@ void BlackboxWindow::setWorkspace(unsigned int n) {
}
-void BlackboxWindow::shade(void) {
-#if 0 //needed?
- if (flags.shaded) {
- flags.shaded = False;
- blackbox_attrib.flags ^= AttribShaded;
- blackbox_attrib.attrib ^= AttribShaded;
-
- if (flags.maximized) {
- remaximize();
- } else {
- XResizeWindow(blackbox->getXDisplay(), frame.window,
- frame.inside_w, frame.inside_h);
- // set the frame rect to the normal size
- frame.rect.setHeight(client.rect.height() + frame.margin.top +
- frame.margin.bottom);
- }
-
- setState(NormalState);
- } else {
- if (! (decorations & Decor_Titlebar))
- return; // can't shade it without a titlebar!
-
- XResizeWindow(blackbox->getXDisplay(), frame.window,
- frame.inside_w, frame.title_h);
- flags.shaded = True;
- blackbox_attrib.flags |= AttribShaded;
- blackbox_attrib.attrib |= AttribShaded;
-
- setState(IconicState);
-
- // set the frame rect to the shaded size
- frame.rect.setHeight(frame.title_h + (frame.border_w * 2));
- }
-#endif
-}
-
-
-void BlackboxWindow::stick(void) {
- if (flags.stuck) {
- blackbox_attrib.flags ^= AttribOmnipresent;
- blackbox_attrib.attrib ^= AttribOmnipresent;
-
- flags.stuck = False;
-
- if (! flags.iconic)
- screen->reassociateWindow(this, BSENTINEL, True);
-
- setState(current_state);
- } else {
- flags.stuck = True;
-
- blackbox_attrib.flags |= AttribOmnipresent;
- blackbox_attrib.attrib |= AttribOmnipresent;
-
- setState(current_state);
- }
-}
-
-
void BlackboxWindow::redrawWindowFrame(void) const {
if (decorations & Decor_Titlebar) {
}
@@ -1785,19 +1750,6 @@ void BlackboxWindow::restoreAttributes(void) {
if (ret != Success || !net || nitems != PropBlackboxAttributesElements)
return;
- if (net->flags & AttribShaded && net->attrib & AttribShaded) {
- flags.shaded = False;
- unsigned long orig_state = current_state;
- shade();
-
- /*
- At this point in the life of a window, current_state should only be set
- to IconicState if the window was an *icon*, not if it was shaded.
- */
- if (orig_state != IconicState)
- current_state = WithdrawnState;
- }
-
if (net->workspace != screen->getCurrentWorkspaceID() &&
net->workspace < screen->getWorkspaceCount()) {
screen->reassociateWindow(this, net->workspace, True);
@@ -1810,15 +1762,6 @@ void BlackboxWindow::restoreAttributes(void) {
current_state = NormalState;
}
- if (net->flags & AttribOmnipresent && net->attrib & AttribOmnipresent) {
- flags.stuck = False;
- stick();
-
- // if the window was on another workspace, it was going to be hidden. this
- // specifies that the window should be mapped since it is sticky.
- if (current_state == WithdrawnState) current_state = NormalState;
- }
-
if (net->flags & AttribMaxHoriz || net->flags & AttribMaxVert) {
blackbox_attrib.premax_x = net->premax_x;
blackbox_attrib.premax_y = net->premax_y;
@@ -1874,9 +1817,6 @@ void BlackboxWindow::restoreAttributes(void) {
if (decorations & Decor_Titlebar) {
if (functions & Func_Close) // close button is controlled by function
decorations |= Decor_Close; // not decor type
- } else {
- if (flags.shaded) // we can not be shaded if we lack a titlebar
- shade();
}
if (flags.visible && frame.window) {
@@ -2667,18 +2607,25 @@ void BlackboxWindow::windowsWMControllerEvent(XWindowsWMNotifyEvent *windows_wm_
case WindowsWMMaximizeWindow:
//printf ("maximize 0x%08x\n", (int)c);
//raise_win(c);
+ show();
#ifdef DEBUG
fprintf (stderr, "\tWindowsWMMaximizeWindow\n");
#endif
break;
case WindowsWMMinimizeWindow:
//printf ("minimize 0x%08x\n", (int)c);
- //iconify();//FIXME: This window become hide. Configure this behavior by ext?
+ iconify();//FIXME: This window become hide. Configure this behavior by ext?
#ifdef DEBUG
fprintf (stderr,"\tWindowsWMMinimizeWindow\n");
#endif
//FIXME:
- screen->getWorkspace(blackbox_attrib.workspace)->lowerWindow(this);
+ //screen->getWorkspace(blackbox_attrib.workspace)->lowerWindow(this);
+ break;
+ case WindowsWMRestoreWindow:
+#ifdef DEBUG
+ fprintf (stderr, "\tWindowsWMRestoreWindow\n");
+#endif
+ show();
break;
case WindowsWMCloseWindow:
#ifdef DEBUG
@@ -2744,10 +2691,6 @@ void BlackboxWindow::restore(bool remap) {
XChangeSaveSet(blackbox->getXDisplay(), client.window, SetModeDelete);
XSelectInput(blackbox->getXDisplay(), client.window, NoEventMask);
- // do not leave a shaded window as an icon unless it was an icon
- if (flags.shaded && ! flags.iconic)
- current_state = NormalState;
-
setState(current_state);
restoreGravity(client.rect);
@@ -2780,10 +2723,6 @@ void BlackboxWindow::timeout(void) {
void BlackboxWindow::changeBlackboxHints(const BlackboxHints *net) {
- if ((net->flags & AttribShaded) &&
- ((blackbox_attrib.attrib & AttribShaded) !=
- (net->attrib & AttribShaded)))
- shade();
if (flags.visible && // watch out for requests when we can not be seen
(net->flags & (AttribMaxVert | AttribMaxHoriz)) &&
@@ -2806,11 +2745,6 @@ void BlackboxWindow::changeBlackboxHints(const BlackboxHints *net) {
}
}
- if ((net->flags & AttribOmnipresent) &&
- ((blackbox_attrib.attrib & AttribOmnipresent) !=
- (net->attrib & AttribOmnipresent)))
- stick();
-
if ((net->flags & AttribWorkspace) &&
(blackbox_attrib.workspace != net->workspace)) {
screen->reassociateWindow(this, net->workspace, True);
@@ -2860,9 +2794,6 @@ void BlackboxWindow::changeBlackboxHints(const BlackboxHints *net) {
if (decorations & Decor_Titlebar) {
if (functions & Func_Close) // close button is controlled by function
decorations |= Decor_Close; // not decor type
- } else {
- if (flags.shaded) // we can not be shaded if we lack a titlebar
- shade();
}
if (flags.visible && frame.window) {
diff --git a/src/Window.hh b/src/Window.hh
index c7f39e5..2015771 100644
--- a/src/Window.hh
+++ b/src/Window.hh
@@ -128,11 +128,11 @@ private:
struct _flags {
bool moving, // is moving?
resizing, // is resizing?
- shaded, // is shaded?
+ //shaded, // is shaded?
visible, // is visible?
iconic, // is iconified?
focused, // has focus?
- stuck, // is omnipresent
+ //stuck, // is omnipresent
modal, // is modal? (must be dismissed to continue)
send_focus_message, // should we send focus messages to our client?
shaped; // does the frame use the shape extension?
@@ -274,10 +274,10 @@ public:
inline bool isFocused(void) const { return flags.focused; }
inline bool isVisible(void) const { return flags.visible; }
inline bool isIconic(void) const { return flags.iconic; }
- inline bool isShaded(void) const { return flags.shaded; }
+ // inline bool isShaded(void) const { return flags.shaded; }
inline bool isMaximized(void) const { return flags.maximized; }
inline bool isModal(void) const { return flags.modal; }
- inline bool isStuck(void) const { return flags.stuck; }
+ //inline bool isStuck(void) const { return flags.stuck; }
inline bool isIconifiable(void) const { return functions & Func_Iconify; }
inline bool isMaximizable(void) const { return functions & Func_Maximize; }
inline bool isResizable(void) const { return functions & Func_Resize; }
@@ -322,8 +322,8 @@ public:
void withdraw(void);
void maximize(unsigned int button);
void remaximize(void);
- void shade(void);
- void stick(void);
+ // void shade(void);
+ // void stick(void);
void reconfigure(void);
void grabButtons(void);
void ungrabButtons(void);
diff --git a/src/Workspace.cc b/src/Workspace.cc
index e4ad772..2599e58 100644
--- a/src/Workspace.cc
+++ b/src/Workspace.cc
@@ -94,14 +94,6 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
if ((w->isFocused() || w == lastfocus) &&
! screen->getBlackbox()->doShutdown()) {
focusFallback(w);
-
- // if the window is sticky, then it needs to be removed on all other
- // workspaces too!
- if (w->isStuck()) {
- for (unsigned int i = 0; i < screen->getWorkspaceCount(); ++i)
- if (i != id)
- screen->getWorkspace(i)->focusFallback(w);
- }
}
windowList.remove(w);
@@ -369,7 +361,7 @@ unsigned int Workspace::getCount(void) const {
void Workspace::hide(void) {
BlackboxWindow *focused = screen->getBlackbox()->getFocusedWindow();
if (focused && focused->getScreen() == screen) {
- assert(focused->isStuck() || focused->getWorkspaceNumber() == id);
+ assert(focused->getWorkspaceNumber() == id);
lastfocus = focused;
} else {
@@ -386,8 +378,7 @@ void Workspace::hide(void) {
const BlackboxWindowList::reverse_iterator end = stackingList.rend();
for (; it != end; ++it) {
BlackboxWindow *bw = *it;
- if (! bw->isStuck())
- bw->withdraw();
+ bw->withdraw();
}
}
@@ -543,7 +534,6 @@ bool Workspace::smartPlacement(Rect& win, const Rect& availableArea) {
Rect tmp;
for (; wit != end; ++wit) {
const BlackboxWindow* const curr = *wit;
- if (curr->isShaded()) continue;
tmp.setRect(curr->frameRect().x(), curr->frameRect().y(),
curr->frameRect().width() + screen->getBorderWidth(),
diff --git a/src/blackbox.cc.in b/src/blackbox.cc.in
index 3d942a4..0d8b4bc 100644
--- a/src/blackbox.cc.in
+++ b/src/blackbox.cc.in
@@ -314,10 +314,6 @@ void Blackbox::process_event(XEvent *e) {
win->deiconify();
focus = True;
}
- if (win->isShaded()) {
- win->shade();
- focus = True;
- }
if (focus && (win->isTransient() || win->getScreen()->doFocusNew()))
win->setInputFocus();
@@ -737,8 +733,8 @@ void Blackbox::process_event(XEvent *e) {
if (win)
{
//printf ("\tungrab\n");
- win->ungrabButtons();
- win->grabButtons();
+ //win->ungrabButtons();
+ //win->grabButtons();
}
setFocusedWindow(0);
break;
@@ -826,6 +822,8 @@ void Blackbox::init_icccm(void) {
XInternAtom(getXDisplay(), WINDOWSWM_MOUSE_ACTIVATE, False);
windowswm_client_window =
XInternAtom(getXDisplay(), WINDOWSWM_CLIENT_WINDOW, False);
+ windowswm_native_hwnd =
+ XInternAtom(getXDisplay(), WINDOWSWM_NATIVE_HWND, False);
#ifdef NEWWMSPEC
net_supported = XInternAtom(getXDisplay(), "_NET_SUPPORTED", False);
diff --git a/src/blackbox.hh b/src/blackbox.hh
index 299fa02..e1fdd93 100644
--- a/src/blackbox.hh
+++ b/src/blackbox.hh
@@ -172,7 +172,7 @@ private:
// property for WindowsWM
Atom windowswm_raise_on_click, windowswm_mouse_activate,
- windowswm_client_window;
+ windowswm_client_window, windowswm_native_hwnd;
#ifdef NEWWMSPEC
// root window properties
@@ -349,12 +349,14 @@ public:
inline Atom getBlackboxCycleWindowFocusAtom(void) const
{ return blackbox_cycle_window_focus; }
- inline Atom WindowsWMRaiseOnClick(void) const
+ inline Atom getWindowsWMRaiseOnClick(void) const
{ return windowswm_raise_on_click; }
- inline Atom WindowsWMMouseActivate(void) const
+ inline Atom getWindowsWMMouseActivate(void) const
{ return windowswm_mouse_activate; }
- /*inline */Atom WindowsWMClientWindow(void) const
+ inline Atom getWindowsWMClientWindow(void) const
{ return windowswm_client_window; }
+ inline Atom getWindowsWMNativeHWnd(void) const
+ { return windowswm_native_hwnd; }
#ifdef NEWWMSPEC
// root window properties