diff options
author | fluxgen <fluxgen> | 2003-07-23 10:43:30 (GMT) |
---|---|---|
committer | fluxgen <fluxgen> | 2003-07-23 10:43:30 (GMT) |
commit | cc062647d04ced5cc825cda04f77b27eaa1917d0 (patch) | |
tree | 8cc96cd45e1518c219e79488a638d3897ba9cb0d | |
parent | 906a6b239589af29624bca151172c5e6a436bfc8 (diff) | |
download | fluxbox_lack-cc062647d04ced5cc825cda04f77b27eaa1917d0.zip fluxbox_lack-cc062647d04ced5cc825cda04f77b27eaa1917d0.tar.bz2 |
fixed kde dockapp bug
-rw-r--r-- | src/Slit.cc | 41 | ||||
-rw-r--r-- | src/fluxbox.cc | 57 | ||||
-rw-r--r-- | src/fluxbox.hh | 3 |
3 files changed, 58 insertions, 43 deletions
diff --git a/src/Slit.cc b/src/Slit.cc index da2b860..18a4c31 100644 --- a/src/Slit.cc +++ b/src/Slit.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Slit.cc,v 1.73 2003/07/19 11:55:49 rathnor Exp $ | 25 | // $Id: Slit.cc,v 1.74 2003/07/23 10:42:12 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Slit.hh" | 27 | #include "Slit.hh" |
28 | 28 | ||
@@ -969,45 +969,6 @@ void Slit::handleEvent(XEvent &event) { | |||
969 | removeClient(event.xdestroywindow.window, false); | 969 | removeClient(event.xdestroywindow.window, false); |
970 | } else if (event.type == UnmapNotify) { | 970 | } else if (event.type == UnmapNotify) { |
971 | removeClient(event.xunmap.window); | 971 | removeClient(event.xunmap.window); |
972 | } else if (event.type == MapRequest) { | ||
973 | #ifdef KDE | ||
974 | //Check and see if client is KDE dock applet. | ||
975 | //If so add to Slit | ||
976 | bool iskdedockapp = false; | ||
977 | Atom ajunk; | ||
978 | int ijunk; | ||
979 | unsigned long *data = (unsigned long *) 0, uljunk; | ||
980 | Display *disp = FbTk::App::instance()->display(); | ||
981 | // Check if KDE v2.x dock applet | ||
982 | if (XGetWindowProperty(disp, event.xmaprequest.window, | ||
983 | m_kwm2_dockwindow, 0l, 1l, False, | ||
984 | XA_WINDOW, &ajunk, &ijunk, &uljunk, | ||
985 | &uljunk, (unsigned char **) &data) == Success) { | ||
986 | |||
987 | if (data) | ||
988 | iskdedockapp = True; | ||
989 | XFree((void *) data); | ||
990 | data = 0; | ||
991 | } | ||
992 | |||
993 | // Check if KDE v1.x dock applet | ||
994 | if (!iskdedockapp) { | ||
995 | if (XGetWindowProperty(disp, event.xmaprequest.window, | ||
996 | m_kwm1_dockwindow, 0l, 1l, False, | ||
997 | m_kwm1_dockwindow, &ajunk, &ijunk, &uljunk, | ||
998 | &uljunk, (unsigned char **) &data) == Success && data) { | ||
999 | iskdedockapp = (data && data[0] != 0); | ||
1000 | XFree((void *) data); | ||
1001 | data = 0; | ||
1002 | } | ||
1003 | } | ||
1004 | |||
1005 | if (iskdedockapp) { | ||
1006 | XSelectInput(disp, event.xmaprequest.window, StructureNotifyMask); | ||
1007 | addClient(event.xmaprequest.window); | ||
1008 | } | ||
1009 | #endif //KDE | ||
1010 | |||
1011 | } | 972 | } |
1012 | } | 973 | } |
1013 | 974 | ||
diff --git a/src/fluxbox.cc b/src/fluxbox.cc index 5bf54bc..dd371ee 100644 --- a/src/fluxbox.cc +++ b/src/fluxbox.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: fluxbox.cc,v 1.173 2003/07/21 15:26:57 rathnor Exp $ | 25 | // $Id: fluxbox.cc,v 1.174 2003/07/23 10:43:30 fluxgen Exp $ |
26 | 26 | ||
27 | #include "fluxbox.hh" | 27 | #include "fluxbox.hh" |
28 | 28 | ||
@@ -423,7 +423,14 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile | |||
423 | m_server_grabs(0), | 423 | m_server_grabs(0), |
424 | m_randr_event_type(0), | 424 | m_randr_event_type(0), |
425 | m_RC_PATH("fluxbox"), | 425 | m_RC_PATH("fluxbox"), |
426 | m_RC_INIT_FILE("init") { | 426 | m_RC_INIT_FILE("init"), |
427 | // For KDE dock applets | ||
428 | // KDE v1.x | ||
429 | m_kwm1_dockwindow(XInternAtom(FbTk::App::instance()->display(), | ||
430 | "KWM_DOCKWINDOW", False)), | ||
431 | // KDE v2.x | ||
432 | m_kwm2_dockwindow(XInternAtom(FbTk::App::instance()->display(), | ||
433 | "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False)) { | ||
427 | 434 | ||
428 | 435 | ||
429 | if (s_singleton != 0) | 436 | if (s_singleton != 0) |
@@ -780,6 +787,52 @@ void Fluxbox::handleEvent(XEvent * const e) { | |||
780 | } | 787 | } |
781 | break; | 788 | break; |
782 | case MapRequest: { | 789 | case MapRequest: { |
790 | #ifdef SLIT | ||
791 | #ifdef KDE | ||
792 | //Check and see if client is KDE dock applet. | ||
793 | //If so add to Slit | ||
794 | bool iskdedockapp = false; | ||
795 | Atom ajunk; | ||
796 | int ijunk; | ||
797 | unsigned long *data = (unsigned long *) 0, uljunk; | ||
798 | Display *disp = FbTk::App::instance()->display(); | ||
799 | // Check if KDE v2.x dock applet | ||
800 | if (XGetWindowProperty(disp, e->xmaprequest.window, | ||
801 | m_kwm2_dockwindow, 0l, 1l, False, | ||
802 | XA_WINDOW, &ajunk, &ijunk, &uljunk, | ||
803 | &uljunk, (unsigned char **) &data) == Success) { | ||
804 | |||
805 | if (data) | ||
806 | iskdedockapp = True; | ||
807 | XFree((void *) data); | ||
808 | data = 0; | ||
809 | } | ||
810 | |||
811 | // Check if KDE v1.x dock applet | ||
812 | if (!iskdedockapp) { | ||
813 | if (XGetWindowProperty(disp, e->xmaprequest.window, | ||
814 | m_kwm1_dockwindow, 0l, 1l, False, | ||
815 | m_kwm1_dockwindow, &ajunk, &ijunk, &uljunk, | ||
816 | &uljunk, (unsigned char **) &data) == Success && data) { | ||
817 | iskdedockapp = (data && data[0] != 0); | ||
818 | XFree((void *) data); | ||
819 | data = 0; | ||
820 | } | ||
821 | } | ||
822 | |||
823 | if (iskdedockapp) { | ||
824 | XSelectInput(disp, e->xmaprequest.window, StructureNotifyMask); | ||
825 | ScreenList::iterator it = m_screen_list.begin(); | ||
826 | for (; (*it) == m_screen_list.back(); ++it) { | ||
827 | if ((*it)->slit()) | ||
828 | (*it)->slit()->addClient(e->xmaprequest.window); | ||
829 | } | ||
830 | |||
831 | return; // dont create a FluxboxWindow for this one | ||
832 | } | ||
833 | #endif // KDE | ||
834 | #endif // SLIT | ||
835 | |||
783 | #ifdef DEBUG | 836 | #ifdef DEBUG |
784 | cerr<<"MapRequest for 0x"<<hex<<e->xmaprequest.window<<dec<<endl; | 837 | cerr<<"MapRequest for 0x"<<hex<<e->xmaprequest.window<<dec<<endl; |
785 | #endif // DEBUG | 838 | #endif // DEBUG |
diff --git a/src/fluxbox.hh b/src/fluxbox.hh index 1975929..19f3d32 100644 --- a/src/fluxbox.hh +++ b/src/fluxbox.hh | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: fluxbox.hh,v 1.67 2003/07/19 13:51:24 rathnor Exp $ | 25 | // $Id: fluxbox.hh,v 1.68 2003/07/23 10:43:30 fluxgen Exp $ |
26 | 26 | ||
27 | #ifndef FLUXBOX_HH | 27 | #ifndef FLUXBOX_HH |
28 | #define FLUXBOX_HH | 28 | #define FLUXBOX_HH |
@@ -281,6 +281,7 @@ private: | |||
281 | bool m_have_shape; ///< if shape is supported by server | 281 | bool m_have_shape; ///< if shape is supported by server |
282 | const char *m_RC_PATH; | 282 | const char *m_RC_PATH; |
283 | const char *m_RC_INIT_FILE; | 283 | const char *m_RC_INIT_FILE; |
284 | Atom m_kwm1_dockwindow, m_kwm2_dockwindow; | ||
284 | }; | 285 | }; |
285 | 286 | ||
286 | 287 | ||