diff options
Diffstat (limited to 'src/Screen.cc')
-rw-r--r-- | src/Screen.cc | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index 293247b..55b74e1 100644 --- a/src/Screen.cc +++ b/src/Screen.cc | |||
@@ -348,6 +348,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
348 | m_currentworkspace_sig(*this), // current workspace signal | 348 | m_currentworkspace_sig(*this), // current workspace signal |
349 | m_reconfigure_sig(*this), // reconfigure signal | 349 | m_reconfigure_sig(*this), // reconfigure signal |
350 | m_resize_sig(*this), | 350 | m_resize_sig(*this), |
351 | m_bg_change_sig(*this), | ||
351 | m_layermanager(num_layers), | 352 | m_layermanager(num_layers), |
352 | m_windowtheme(new FbWinFrameTheme(scrn)), | 353 | m_windowtheme(new FbWinFrameTheme(scrn)), |
353 | // the order of windowtheme and winbutton theme is important | 354 | // the order of windowtheme and winbutton theme is important |
@@ -795,6 +796,37 @@ void BScreen::update(FbTk::Subject *subj) { | |||
795 | 796 | ||
796 | } | 797 | } |
797 | 798 | ||
799 | void BScreen::propertyNotify(Atom atom) { | ||
800 | static Atom fbcmd_atom = XInternAtom(FbTk::App::instance()->display(), | ||
801 | "_FLUXBOX_COMMAND", False); | ||
802 | if (atom == fbcmd_atom) { | ||
803 | Atom xa_ret_type; | ||
804 | int ret_format; | ||
805 | unsigned long ret_nitems, ret_bytes_after; | ||
806 | char *str; | ||
807 | if (rootWindow().property(fbcmd_atom, 0l, 64l, | ||
808 | True, XA_STRING, &xa_ret_type, &ret_format, &ret_nitems, | ||
809 | &ret_bytes_after, (unsigned char **)&str) && str) { | ||
810 | |||
811 | if (ret_bytes_after) { | ||
812 | XFree(str); | ||
813 | long len = 64 + (ret_bytes_after + 3)/4; | ||
814 | rootWindow().property(fbcmd_atom, 0l, len, | ||
815 | True, XA_STRING, &xa_ret_type, &ret_format, &ret_nitems, | ||
816 | &ret_bytes_after, (unsigned char **)&str); | ||
817 | } | ||
818 | |||
819 | FbTk::RefCount<FbTk::Command> cmd(CommandParser::instance().parseLine(str)); | ||
820 | if (cmd.get()) | ||
821 | cmd->execute(); | ||
822 | XFree(str); | ||
823 | |||
824 | } | ||
825 | // TODO: this doesn't belong in FbPixmap | ||
826 | } else if (FbTk::FbPixmap::rootwinPropertyNotify(screenNumber(), atom)) | ||
827 | m_bg_change_sig.notify(); | ||
828 | } | ||
829 | |||
798 | void BScreen::keyPressEvent(XKeyEvent &ke) { | 830 | void BScreen::keyPressEvent(XKeyEvent &ke) { |
799 | if (!m_typing_ahead) { | 831 | if (!m_typing_ahead) { |
800 | Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode, | 832 | Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode, |
@@ -1408,7 +1440,6 @@ void BScreen::updateNetizenConfigNotify(XEvent &e) { | |||
1408 | 1440 | ||
1409 | bool BScreen::isKdeDockapp(Window client) const { | 1441 | bool BScreen::isKdeDockapp(Window client) const { |
1410 | //Check and see if client is KDE dock applet. | 1442 | //Check and see if client is KDE dock applet. |
1411 | //If so add to Slit | ||
1412 | bool iskdedockapp = false; | 1443 | bool iskdedockapp = false; |
1413 | Atom ajunk; | 1444 | Atom ajunk; |
1414 | int ijunk; | 1445 | int ijunk; |