fixed kde dockapp bug

This commit is contained in:
fluxgen 2003-07-23 10:43:30 +00:00
parent 906a6b2395
commit cc062647d0
3 changed files with 58 additions and 43 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Slit.cc,v 1.73 2003/07/19 11:55:49 rathnor Exp $
// $Id: Slit.cc,v 1.74 2003/07/23 10:42:12 fluxgen Exp $
#include "Slit.hh"
@ -969,45 +969,6 @@ void Slit::handleEvent(XEvent &event) {
removeClient(event.xdestroywindow.window, false);
} else if (event.type == UnmapNotify) {
removeClient(event.xunmap.window);
} else if (event.type == MapRequest) {
#ifdef KDE
//Check and see if client is KDE dock applet.
//If so add to Slit
bool iskdedockapp = false;
Atom ajunk;
int ijunk;
unsigned long *data = (unsigned long *) 0, uljunk;
Display *disp = FbTk::App::instance()->display();
// Check if KDE v2.x dock applet
if (XGetWindowProperty(disp, event.xmaprequest.window,
m_kwm2_dockwindow, 0l, 1l, False,
XA_WINDOW, &ajunk, &ijunk, &uljunk,
&uljunk, (unsigned char **) &data) == Success) {
if (data)
iskdedockapp = True;
XFree((void *) data);
data = 0;
}
// Check if KDE v1.x dock applet
if (!iskdedockapp) {
if (XGetWindowProperty(disp, event.xmaprequest.window,
m_kwm1_dockwindow, 0l, 1l, False,
m_kwm1_dockwindow, &ajunk, &ijunk, &uljunk,
&uljunk, (unsigned char **) &data) == Success && data) {
iskdedockapp = (data && data[0] != 0);
XFree((void *) data);
data = 0;
}
}
if (iskdedockapp) {
XSelectInput(disp, event.xmaprequest.window, StructureNotifyMask);
addClient(event.xmaprequest.window);
}
#endif //KDE
}
}

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: fluxbox.cc,v 1.173 2003/07/21 15:26:57 rathnor Exp $
// $Id: fluxbox.cc,v 1.174 2003/07/23 10:43:30 fluxgen Exp $
#include "fluxbox.hh"
@ -423,7 +423,14 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile
m_server_grabs(0),
m_randr_event_type(0),
m_RC_PATH("fluxbox"),
m_RC_INIT_FILE("init") {
m_RC_INIT_FILE("init"),
// For KDE dock applets
// KDE v1.x
m_kwm1_dockwindow(XInternAtom(FbTk::App::instance()->display(),
"KWM_DOCKWINDOW", False)),
// KDE v2.x
m_kwm2_dockwindow(XInternAtom(FbTk::App::instance()->display(),
"_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False)) {
if (s_singleton != 0)
@ -780,6 +787,52 @@ void Fluxbox::handleEvent(XEvent * const e) {
}
break;
case MapRequest: {
#ifdef SLIT
#ifdef KDE
//Check and see if client is KDE dock applet.
//If so add to Slit
bool iskdedockapp = false;
Atom ajunk;
int ijunk;
unsigned long *data = (unsigned long *) 0, uljunk;
Display *disp = FbTk::App::instance()->display();
// Check if KDE v2.x dock applet
if (XGetWindowProperty(disp, e->xmaprequest.window,
m_kwm2_dockwindow, 0l, 1l, False,
XA_WINDOW, &ajunk, &ijunk, &uljunk,
&uljunk, (unsigned char **) &data) == Success) {
if (data)
iskdedockapp = True;
XFree((void *) data);
data = 0;
}
// Check if KDE v1.x dock applet
if (!iskdedockapp) {
if (XGetWindowProperty(disp, e->xmaprequest.window,
m_kwm1_dockwindow, 0l, 1l, False,
m_kwm1_dockwindow, &ajunk, &ijunk, &uljunk,
&uljunk, (unsigned char **) &data) == Success && data) {
iskdedockapp = (data && data[0] != 0);
XFree((void *) data);
data = 0;
}
}
if (iskdedockapp) {
XSelectInput(disp, e->xmaprequest.window, StructureNotifyMask);
ScreenList::iterator it = m_screen_list.begin();
for (; (*it) == m_screen_list.back(); ++it) {
if ((*it)->slit())
(*it)->slit()->addClient(e->xmaprequest.window);
}
return; // dont create a FluxboxWindow for this one
}
#endif // KDE
#endif // SLIT
#ifdef DEBUG
cerr<<"MapRequest for 0x"<<hex<<e->xmaprequest.window<<dec<<endl;
#endif // DEBUG

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: fluxbox.hh,v 1.67 2003/07/19 13:51:24 rathnor Exp $
// $Id: fluxbox.hh,v 1.68 2003/07/23 10:43:30 fluxgen Exp $
#ifndef FLUXBOX_HH
#define FLUXBOX_HH
@ -281,6 +281,7 @@ private:
bool m_have_shape; ///< if shape is supported by server
const char *m_RC_PATH;
const char *m_RC_INIT_FILE;
Atom m_kwm1_dockwindow, m_kwm2_dockwindow;
};