diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Screen.cc | 121 |
1 files changed, 34 insertions, 87 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index efe7cb8..04d73af 100644 --- a/src/Screen.cc +++ b/src/Screen.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: Screen.cc,v 1.221 2003/08/17 19:06:10 fluxgen Exp $ | 25 | // $Id: Screen.cc,v 1.222 2003/08/18 11:26:17 fluxgen Exp $ |
26 | 26 | ||
27 | 27 | ||
28 | #include "Screen.hh" | 28 | #include "Screen.hh" |
@@ -79,23 +79,11 @@ | |||
79 | #include <ctype.h> | 79 | #include <ctype.h> |
80 | #endif // HAVE_CTYPE_H | 80 | #endif // HAVE_CTYPE_H |
81 | 81 | ||
82 | #ifdef HAVE_DIRENT_H | ||
83 | #include <dirent.h> | ||
84 | #endif // HAVE_DIRENT_H | ||
85 | |||
86 | #ifdef HAVE_LOCALE_H | ||
87 | #include <locale.h> | ||
88 | #endif // HAVE_LOCALE_H | ||
89 | |||
90 | #ifdef HAVE_UNISTD_H | 82 | #ifdef HAVE_UNISTD_H |
91 | #include <sys/types.h> | 83 | #include <sys/types.h> |
92 | #include <unistd.h> | 84 | #include <unistd.h> |
93 | #endif // HAVE_UNISTD_H | 85 | #endif // HAVE_UNISTD_H |
94 | 86 | ||
95 | #ifdef HAVE_SYS_STAT_H | ||
96 | #include <sys/stat.h> | ||
97 | #endif // HAVE_SYS_STAT_H | ||
98 | |||
99 | #ifdef HAVE_STDARG_H | 87 | #ifdef HAVE_STDARG_H |
100 | #include <stdarg.h> | 88 | #include <stdarg.h> |
101 | #endif // HAVE_STDARG_H | 89 | #endif // HAVE_STDARG_H |
@@ -111,10 +99,6 @@ | |||
111 | #endif // HAVE_SYS_TIME_H | 99 | #endif // HAVE_SYS_TIME_H |
112 | #endif // TIME_WITH_SYS_TIME | 100 | #endif // TIME_WITH_SYS_TIME |
113 | 101 | ||
114 | #ifndef MAXPATHLEN | ||
115 | #define MAXPATHLEN 255 | ||
116 | #endif // MAXPATHLEN | ||
117 | |||
118 | #include <X11/Xatom.h> | 102 | #include <X11/Xatom.h> |
119 | #include <X11/keysym.h> | 103 | #include <X11/keysym.h> |
120 | #include <X11/cursorfont.h> | 104 | #include <X11/cursorfont.h> |
@@ -433,8 +417,8 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
433 | m_configmenu->update(); | 417 | m_configmenu->update(); |
434 | 418 | ||
435 | #ifdef SLIT | 419 | #ifdef SLIT |
436 | // if (slit()) // this will load theme and reconfigure slit | 420 | if (slit()) // this will load theme and reconfigure slit |
437 | // FbTk::ThemeManager::instance().loadTheme(slit()->theme()); | 421 | FbTk::ThemeManager::instance().loadTheme(slit()->theme()); |
438 | #endif // SLIT | 422 | #endif // SLIT |
439 | 423 | ||
440 | FbTk::ThemeManager::instance().load(Fluxbox::instance()->getStyleFilename()); | 424 | FbTk::ThemeManager::instance().load(Fluxbox::instance()->getStyleFilename()); |
@@ -530,11 +514,9 @@ BScreen::~BScreen() { | |||
530 | 514 | ||
531 | m_netizen_list.clear(); | 515 | m_netizen_list.clear(); |
532 | 516 | ||
533 | #ifdef XINERAMA | ||
534 | if (hasXinerama() && m_xinerama_headinfo) { | 517 | if (hasXinerama() && m_xinerama_headinfo) { |
535 | delete [] m_xinerama_headinfo; | 518 | delete [] m_xinerama_headinfo; |
536 | } | 519 | } |
537 | #endif // XINERAMA | ||
538 | } | 520 | } |
539 | 521 | ||
540 | unsigned int BScreen::currentWorkspaceID() const { | 522 | unsigned int BScreen::currentWorkspaceID() const { |
@@ -602,9 +584,6 @@ unsigned int BScreen::maxBottom(int head) const { | |||
602 | } | 584 | } |
603 | 585 | ||
604 | void BScreen::reconfigure() { | 586 | void BScreen::reconfigure() { |
605 | #ifdef DEBUG | ||
606 | cerr<<__FILE__<<"("<<__LINE__<<"): BScreen::reconfigure"<<endl; | ||
607 | #endif // DEBUG | ||
608 | m_menutheme->setAlpha(*resource.menu_alpha); | 587 | m_menutheme->setAlpha(*resource.menu_alpha); |
609 | Fluxbox::instance()->loadRootCommand(*this); | 588 | Fluxbox::instance()->loadRootCommand(*this); |
610 | 589 | ||
@@ -865,11 +844,6 @@ void BScreen::changeWorkspaceID(unsigned int id) { | |||
865 | if (focused_client) | 844 | if (focused_client) |
866 | focused = focused_client->fbwindow(); | 845 | focused = focused_client->fbwindow(); |
867 | 846 | ||
868 | #ifdef DEBUG | ||
869 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): "<<focused_client<<endl; | ||
870 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): focused = "<<focused<<endl; | ||
871 | #endif // DEBUG | ||
872 | |||
873 | if (focused && focused->isMoving()) { | 847 | if (focused && focused->isMoving()) { |
874 | if (doOpaqueMove()) | 848 | if (doOpaqueMove()) |
875 | reassociateWindow(focused, id, true); | 849 | reassociateWindow(focused, id, true); |
@@ -1268,12 +1242,8 @@ void BScreen::reassociateWindow(FluxboxWindow *w, unsigned int wkspc_id, | |||
1268 | if (w == 0) | 1242 | if (w == 0) |
1269 | return; | 1243 | return; |
1270 | 1244 | ||
1271 | if (wkspc_id >= getCount()) { | 1245 | if (wkspc_id >= getCount()) |
1272 | wkspc_id = currentWorkspace()->workspaceID(); | 1246 | wkspc_id = currentWorkspace()->workspaceID(); |
1273 | #ifdef DEBUG | ||
1274 | cerr<<__FILE__<<"("<<__LINE__<<"): wkspc_id >= getCount()"<<endl; | ||
1275 | #endif // DEBUG | ||
1276 | } | ||
1277 | 1247 | ||
1278 | if (!w->isIconic() && w->workspaceNumber() == wkspc_id) | 1248 | if (!w->isIconic() && w->workspaceNumber() == wkspc_id) |
1279 | return; | 1249 | return; |
@@ -1660,16 +1630,13 @@ void BScreen::initMenu() { | |||
1660 | FbTk::RefCount<FbTk::Command> exit_fb(new FbCommands::ExitFluxboxCmd()); | 1630 | FbTk::RefCount<FbTk::Command> exit_fb(new FbCommands::ExitFluxboxCmd()); |
1661 | FbTk::RefCount<FbTk::Command> execute_xterm(new FbCommands::ExecuteCmd("xterm", screenNumber())); | 1631 | FbTk::RefCount<FbTk::Command> execute_xterm(new FbCommands::ExecuteCmd("xterm", screenNumber())); |
1662 | m_rootmenu->setInternalMenu(); | 1632 | m_rootmenu->setInternalMenu(); |
1663 | m_rootmenu->insert(i18n->getMessage( | 1633 | m_rootmenu->insert(i18n->getMessage(FBNLS::ScreenSet, FBNLS::Screenxterm, |
1664 | FBNLS::ScreenSet, FBNLS::Screenxterm, | ||
1665 | "xterm"), | 1634 | "xterm"), |
1666 | execute_xterm); | 1635 | execute_xterm); |
1667 | m_rootmenu->insert(i18n->getMessage( | 1636 | m_rootmenu->insert(i18n->getMessage(FBNLS::ScreenSet, FBNLS::ScreenRestart, |
1668 | FBNLS::ScreenSet, FBNLS::ScreenRestart, | ||
1669 | "Restart"), | 1637 | "Restart"), |
1670 | restart_fb); | 1638 | restart_fb); |
1671 | m_rootmenu->insert(i18n->getMessage( | 1639 | m_rootmenu->insert(i18n->getMessage(FBNLS::ScreenSet, FBNLS::ScreenExit, |
1672 | FBNLS::ScreenSet, FBNLS::ScreenExit, | ||
1673 | "Exit"), | 1640 | "Exit"), |
1674 | exit_fb); | 1641 | exit_fb); |
1675 | } | 1642 | } |
@@ -1727,8 +1694,7 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1727 | } else if (str_key == "exec") { // exec | 1694 | } else if (str_key == "exec") { // exec |
1728 | if (!(str_label.size() && str_cmd.size())) { | 1695 | if (!(str_label.size() && str_cmd.size())) { |
1729 | fprintf(stderr, | 1696 | fprintf(stderr, |
1730 | i18n->getMessage( | 1697 | i18n->getMessage(FBNLS::ScreenSet, FBNLS::ScreenEXECError, |
1731 | FBNLS::ScreenSet, FBNLS::ScreenEXECError, | ||
1732 | "BScreen::parseMenuFile: [exec] error, " | 1698 | "BScreen::parseMenuFile: [exec] error, " |
1733 | "no menu label and/or command defined\n")); | 1699 | "no menu label and/or command defined\n")); |
1734 | cerr<<"Row: "<<row<<endl; | 1700 | cerr<<"Row: "<<row<<endl; |
@@ -1743,8 +1709,7 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1743 | } else if (str_key == "exit") { // exit | 1709 | } else if (str_key == "exit") { // exit |
1744 | if (!str_label.size()) { | 1710 | if (!str_label.size()) { |
1745 | fprintf(stderr, | 1711 | fprintf(stderr, |
1746 | i18n->getMessage( | 1712 | i18n->getMessage(FBNLS::ScreenSet, FBNLS::ScreenEXITError, |
1747 | FBNLS::ScreenSet, FBNLS::ScreenEXITError, | ||
1748 | "BScreen::parseMenuFile: [exit] error, " | 1713 | "BScreen::parseMenuFile: [exit] error, " |
1749 | "no menu label defined\n")); | 1714 | "no menu label defined\n")); |
1750 | cerr<<"Row: "<<row<<endl; | 1715 | cerr<<"Row: "<<row<<endl; |
@@ -1767,8 +1732,7 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1767 | if (! str_label.size()) { | 1732 | if (! str_label.size()) { |
1768 | fprintf(stderr, | 1733 | fprintf(stderr, |
1769 | i18n-> | 1734 | i18n-> |
1770 | getMessage( | 1735 | getMessage(FBNLS::ScreenSet, FBNLS::ScreenCONFIGError, |
1771 | FBNLS::ScreenSet, FBNLS::ScreenCONFIGError, | ||
1772 | "BScreen::parseMenufile: [config] error, " | 1736 | "BScreen::parseMenufile: [config] error, " |
1773 | "no label defined")); | 1737 | "no label defined")); |
1774 | cerr<<"Row: "<<row<<endl; | 1738 | cerr<<"Row: "<<row<<endl; |
@@ -1784,8 +1748,7 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1784 | if (!str_label.size()) { | 1748 | if (!str_label.size()) { |
1785 | fprintf(stderr, | 1749 | fprintf(stderr, |
1786 | i18n-> | 1750 | i18n-> |
1787 | getMessage( | 1751 | getMessage(FBNLS::ScreenSet, FBNLS::ScreenINCLUDEError, |
1788 | FBNLS::ScreenSet, FBNLS::ScreenINCLUDEError, | ||
1789 | "BScreen::parseMenuFile: [include] error, " | 1752 | "BScreen::parseMenuFile: [include] error, " |
1790 | "no filename defined\n")); | 1753 | "no filename defined\n")); |
1791 | cerr<<"Row: "<<row<<endl; | 1754 | cerr<<"Row: "<<row<<endl; |
@@ -1794,32 +1757,22 @@ bool BScreen::parseMenuFile(ifstream &file, FbTk::Menu &menu, int &row) { | |||
1794 | string newfile(FbTk::StringUtil::expandFilename(str_label)); | 1757 | string newfile(FbTk::StringUtil::expandFilename(str_label)); |
1795 | 1758 | ||
1796 | if (newfile.size() != 0) { | 1759 | if (newfile.size() != 0) { |
1797 | FILE *submenufile = fopen(newfile.c_str(), "r"); | 1760 | if (!FbTk::Directory::isRegularFile(newfile)) { |
1798 | 1761 | fprintf(stderr, | |
1799 | if (submenufile) { | 1762 | i18n-> |
1800 | struct stat buf; | 1763 | getMessage( |
1801 | if (fstat(fileno(submenufile), &buf) || | 1764 | FBNLS::ScreenSet, |
1802 | (! S_ISREG(buf.st_mode))) { | 1765 | FBNLS::ScreenINCLUDEErrorReg, |
1803 | fprintf(stderr, | 1766 | "BScreen::parseMenuFile: [include] error: " |
1804 | i18n-> | 1767 | "'%s' is not a regular file\n"), |
1805 | getMessage( | 1768 | newfile.c_str()); |
1806 | FBNLS::ScreenSet, | 1769 | cerr<<"Row: "<<row<<endl; |
1807 | FBNLS::ScreenINCLUDEErrorReg, | 1770 | } else { |
1808 | "BScreen::parseMenuFile: [include] error: " | 1771 | // the file is a regular file, lets open and parse it |
1809 | "'%s' is not a regular file\n"), | 1772 | ifstream subfile(newfile.c_str()); |
1810 | newfile.c_str()); | 1773 | if (!parseMenuFile(subfile, menu, row)) |
1811 | 1774 | Fluxbox::instance()->saveMenuFilename(newfile.c_str()); | |
1812 | cerr<<"Row: "<<row<<endl; | 1775 | } |
1813 | } | ||
1814 | |||
1815 | if (! feof(submenufile)) { | ||
1816 | fclose(submenufile); | ||
1817 | ifstream subfile(newfile.c_str()); | ||
1818 | if (! parseMenuFile(subfile, menu, row)) | ||
1819 | Fluxbox::instance()->saveMenuFilename(newfile.c_str()); | ||
1820 | } | ||
1821 | } else | ||
1822 | perror(newfile.c_str()); | ||
1823 | } | 1776 | } |
1824 | } // end of else 'x' | 1777 | } // end of else 'x' |
1825 | } // end of include | 1778 | } // end of include |
@@ -2028,7 +1981,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) { | |||
2028 | "AntiAlias"), | 1981 | "AntiAlias"), |
2029 | *resource.antialias, | 1982 | *resource.antialias, |
2030 | save_and_reconfigure)); | 1983 | save_and_reconfigure)); |
2031 | 1984 | //!! TODO: antialias | |
2032 | FbTk::MenuItem *menu_alpha_item = new IntResMenuItem("Menu Alpha", resource.menu_alpha, | 1985 | FbTk::MenuItem *menu_alpha_item = new IntResMenuItem("Menu Alpha", resource.menu_alpha, |
2033 | 0, 255); | 1986 | 0, 255); |
2034 | menu_alpha_item->setCommand(saverc_cmd); | 1987 | menu_alpha_item->setCommand(saverc_cmd); |
@@ -2046,8 +1999,6 @@ void BScreen::createStyleMenu(FbTk::Menu &menu, | |||
2046 | // perform shell style ~ home directory expansion | 1999 | // perform shell style ~ home directory expansion |
2047 | string stylesdir(FbTk::StringUtil::expandFilename(directory ? directory : "")); | 2000 | string stylesdir(FbTk::StringUtil::expandFilename(directory ? directory : "")); |
2048 | 2001 | ||
2049 | I18n *i18n = I18n::instance(); | ||
2050 | |||
2051 | if (!FbTk::Directory::isDirectory(stylesdir)) { | 2002 | if (!FbTk::Directory::isDirectory(stylesdir)) { |
2052 | //!! TODO: NLS | 2003 | //!! TODO: NLS |
2053 | cerr<<"Error creating style menu! Stylesdir: "<<stylesdir<<" does not exist or is not a directory!"<<endl; | 2004 | cerr<<"Error creating style menu! Stylesdir: "<<stylesdir<<" does not exist or is not a directory!"<<endl; |
@@ -2065,15 +2016,12 @@ void BScreen::createStyleMenu(FbTk::Menu &menu, | |||
2065 | 2016 | ||
2066 | std::sort(filelist.begin(), filelist.end(), less<string>()); | 2017 | std::sort(filelist.begin(), filelist.end(), less<string>()); |
2067 | 2018 | ||
2068 | int slen = stylesdir.size(); | ||
2069 | // for each file in directory add filename and path to menu | 2019 | // for each file in directory add filename and path to menu |
2070 | for (size_t file_index = 0; file_index < dir.entries(); file_index++) { | 2020 | for (size_t file_index = 0; file_index < dir.entries(); file_index++) { |
2071 | std::string style(stylesdir + '/' + filelist[file_index]); | 2021 | std::string style(stylesdir + '/' + filelist[file_index]); |
2072 | 2022 | // add to menu only if the file is a regular file | |
2073 | if (FbTk::Directory::isRegularFile(style)) { | 2023 | if (FbTk::Directory::isRegularFile(style)) |
2074 | FbTk::MenuItem *item = new StyleMenuItem(filelist[file_index], style); | 2024 | menu.insert(new StyleMenuItem(filelist[file_index], style)); |
2075 | menu.insert(item); | ||
2076 | } | ||
2077 | } | 2025 | } |
2078 | // update menu graphics | 2026 | // update menu graphics |
2079 | menu.update(); | 2027 | menu.update(); |
@@ -2104,7 +2052,7 @@ void BScreen::showPosition(int x, int y) { | |||
2104 | unsigned int head = getCurrHead(); | 2052 | unsigned int head = getCurrHead(); |
2105 | 2053 | ||
2106 | m_geom_window.move(getHeadX(head) + (getHeadWidth(head) - m_geom_window.width()) / 2, | 2054 | m_geom_window.move(getHeadX(head) + (getHeadWidth(head) - m_geom_window.width()) / 2, |
2107 | getHeadY(head) + (getHeadHeight(head) - m_geom_window.height()) / 2); | 2055 | getHeadY(head) + (getHeadHeight(head) - m_geom_window.height()) / 2); |
2108 | 2056 | ||
2109 | } else { | 2057 | } else { |
2110 | m_geom_window.move((width() - m_geom_window.width()) / 2, (height() - m_geom_window.height()) / 2); | 2058 | m_geom_window.move((width() - m_geom_window.width()) / 2, (height() - m_geom_window.height()) / 2); |
@@ -2154,13 +2102,12 @@ void BScreen::showGeometry(unsigned int gx, unsigned int gy) { | |||
2154 | char label[256]; | 2102 | char label[256]; |
2155 | 2103 | ||
2156 | sprintf(label, | 2104 | sprintf(label, |
2157 | I18n::instance()->getMessage( | 2105 | I18n::instance()->getMessage(FBNLS::ScreenSet, FBNLS::ScreenGeometryFormat, |
2158 | FBNLS::ScreenSet, FBNLS::ScreenGeometryFormat, | ||
2159 | "W: %4d x H: %4d"), gx, gy); | 2106 | "W: %4d x H: %4d"), gx, gy); |
2160 | 2107 | ||
2161 | m_geom_window.clear(); | 2108 | m_geom_window.clear(); |
2162 | 2109 | ||
2163 | //TODO: geom window again?! repeated | 2110 | //!! TODO: geom window again?! repeated |
2164 | winFrameTheme().font().drawText(m_geom_window.window(), | 2111 | winFrameTheme().font().drawText(m_geom_window.window(), |
2165 | screenNumber(), | 2112 | screenNumber(), |
2166 | winFrameTheme().labelTextFocusGC(), | 2113 | winFrameTheme().labelTextFocusGC(), |