summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Configmenu.cc167
-rw-r--r--src/Configmenu.hh34
2 files changed, 174 insertions, 27 deletions
diff --git a/src/Configmenu.cc b/src/Configmenu.cc
index 8a15b4e1..99b28209 100644
--- a/src/Configmenu.cc
+++ b/src/Configmenu.cc
@@ -38,6 +38,8 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
focusmenu = new Focusmenu(this);
placementmenu = new Placementmenu(this);
+ windowsnapmenu = new WindowToWindowSnapmenu(this);
+ edgesnapmenu = new WindowToEdgeSnapmenu(this);
#ifdef XINERAMA
xineramamenu = new Xineramamenu(this);
#endif // XINERAMA
@@ -46,6 +48,12 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
"Focus Model"), focusmenu);
insert(i18n(ConfigmenuSet, ConfigmenuWindowPlacement,
"Window Placement"), placementmenu);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowToWindowSnap,
+ "Window-To-Window Snapping"), windowsnapmenu);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowToEdgeSnap,
+ "Window-To-Edge Snapping"), edgesnapmenu);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowPlacement,
+ "Window Placement"), placementmenu);
#ifdef XINERAMA
insert(i18n(ConfigmenuSet, ConfigmenuXineramaSupport,
"XineramaSupport"), xineramamenu);
@@ -62,21 +70,17 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
"Focus New Windows"), 5);
insert(i18n(ConfigmenuSet, ConfigmenuFocusLast,
"Focus Last Window on Workspace"), 6);
- insert(i18n(ConfigmenuSet, ConfigmenuWindowToWindowSnap,
- "Window-To-Window Snapping"), 7);
- insert(i18n(ConfigmenuSet, ConfigmenuWindowCornerSnap,
- "Window Corner Snapping"), 8);
insert(i18n(ConfigmenuSet, ConfigmenuDisableBindings,
- "Disable Mouse with Scroll Lock"), 9);
+ "Disable Mouse with Scroll Lock"), 7);
insert(i18n(ConfigmenuSet, ConfigmenuHideToolbar,
- "Hide Toolbar"), 10);
+ "Hide Toolbar"), 8);
update();
setValues();
}
void Configmenu::setValues(void) {
- int index = 2;
+ int index = 4;
#ifdef XINERAMA
++index;
#endif // XINERAMA
@@ -86,11 +90,6 @@ void Configmenu::setValues(void) {
setItemSelected(index++, getScreen()->doFullMax());
setItemSelected(index++, getScreen()->doFocusNew());
setItemSelected(index++, getScreen()->doFocusLast());
- setItemSelected(index++, getScreen()->getWindowToWindowSnap());
-
- setItemSelected(index, getScreen()->getWindowCornerSnap());
- setItemEnabled(index++, getScreen()->getWindowToWindowSnap());
-
setItemSelected(index++, getScreen()->allowScrollLock());
setItemSelected(index++, getScreen()->doHideToolbar());
}
@@ -99,6 +98,8 @@ void Configmenu::setValues(void) {
Configmenu::~Configmenu(void) {
delete focusmenu;
delete placementmenu;
+ delete windowsnapmenu;
+ delete edgesnapmenu;
#ifdef XINERAMA
delete xineramamenu;
#endif // XINERAMA
@@ -145,24 +146,13 @@ void Configmenu::itemSelected(int button, unsigned int index) {
setItemSelected(index, getScreen()->doFocusLast());
break;
- case 7: // window-to-window snapping
- getScreen()->saveWindowToWindowSnap(! getScreen()->getWindowToWindowSnap());
- setItemSelected(index, getScreen()->getWindowToWindowSnap());
- setItemEnabled(index + 1, getScreen()->getWindowToWindowSnap());
- break;
-
- case 8: // window corner snapping
- getScreen()->saveWindowCornerSnap(! getScreen()->getWindowCornerSnap());
- setItemSelected(index, getScreen()->getWindowCornerSnap());
- break;
-
- case 9: // disable mouse bindings with Scroll Lock
+ case 7: // disable mouse bindings with Scroll Lock
getScreen()->saveAllowScrollLock(! getScreen()->allowScrollLock());
setItemSelected(index, getScreen()->allowScrollLock());
getScreen()->reconfigure();
break;
- case 10: // hide toolbar
+ case 8: // hide toolbar
getScreen()->saveHideToolbar(! getScreen()->doHideToolbar());
setItemSelected(index, getScreen()->doHideToolbar());
break;
@@ -174,6 +164,8 @@ void Configmenu::reconfigure(void) {
setValues();
focusmenu->reconfigure();
placementmenu->reconfigure();
+ windowsnapmenu->reconfigure();
+ edgesnapmenu->reconfigure();
#ifdef XINERAMA
xineramamenu->reconfigure();
#endif // XINERAMA
@@ -445,6 +437,131 @@ void Configmenu::Placementmenu::itemSelected(int button, unsigned int index) {
}
+Configmenu::WindowToWindowSnapmenu::WindowToWindowSnapmenu(Configmenu *cm) :
+ Basemenu(cm->getScreen()) {
+ setLabel(i18n(ConfigmenuSet, ConfigmenuWindowToWindowSnap,
+ "Window-To-Window Snapping"));
+ setInternalMenu();
+
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnapNo, "No Snapping"), 1);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnap, "Edge Snapping"), 2);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoResistance,
+ "Edge Resistance"), 3);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowCornerSnap,
+ "Window Corner Snapping"), 4);
+ update();
+ setValues();
+}
+
+
+void Configmenu::WindowToWindowSnapmenu::setValues(void) {
+ setItemSelected(0, (getScreen()->getWindowToWindowSnap() ==
+ BScreen::WindowNoSnap));
+ setItemSelected(1, (getScreen()->getWindowToWindowSnap() ==
+ BScreen::WindowSnap));
+ setItemSelected(2, (getScreen()->getWindowToWindowSnap() ==
+ BScreen::WindowResistance));
+
+ setItemEnabled(3, (getScreen()->getWindowToWindowSnap() ==
+ BScreen::WindowSnap));
+ setItemSelected(3, getScreen()->getWindowCornerSnap());
+}
+
+
+void Configmenu::WindowToWindowSnapmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
+void Configmenu::WindowToWindowSnapmenu::itemSelected(int button, unsigned int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (! item->function())
+ return;
+
+ switch (item->function()) {
+ case 1: // none
+ getScreen()->saveWindowToWindowSnap(BScreen::WindowNoSnap);
+ break;
+
+ case 2: // edge snapping
+ getScreen()->saveWindowToWindowSnap(BScreen::WindowSnap);
+ break;
+
+ case 3: // edge resistance
+ getScreen()->saveWindowToWindowSnap(BScreen::WindowResistance);
+ break;
+
+ case 4: // window corner snapping
+ getScreen()->saveWindowCornerSnap(! getScreen()->getWindowCornerSnap());
+ break;
+
+ }
+ setValues();
+}
+
+
+Configmenu::WindowToEdgeSnapmenu::WindowToEdgeSnapmenu(Configmenu *cm) :
+ Basemenu(cm->getScreen()) {
+ setLabel(i18n(ConfigmenuSet, ConfigmenuWindowToEdgeSnap,
+ "Window-To-Edge Snapping"));
+ setInternalMenu();
+
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnapNo, "No Snapping"), 1);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoSnap, "Edge Snapping"), 2);
+ insert(i18n(ConfigmenuSet, ConfigmenuWindowDoResistance,
+ "Edge Resistance"), 3);
+ update();
+ setValues();
+}
+
+
+void Configmenu::WindowToEdgeSnapmenu::setValues(void) {
+ setItemSelected(0, (getScreen()->getWindowToEdgeSnap() ==
+ BScreen::WindowNoSnap));
+ setItemSelected(1, (getScreen()->getWindowToEdgeSnap() ==
+ BScreen::WindowSnap));
+ setItemSelected(2, (getScreen()->getWindowToEdgeSnap() ==
+ BScreen::WindowResistance));
+}
+
+
+void Configmenu::WindowToEdgeSnapmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
+void Configmenu::WindowToEdgeSnapmenu::itemSelected(int button, unsigned int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (! item->function())
+ return;
+
+ switch (item->function()) {
+ case 1: // none
+ getScreen()->saveWindowToEdgeSnap(BScreen::WindowNoSnap);
+ break;
+
+ case 2: // edge snapping
+ getScreen()->saveWindowToEdgeSnap(BScreen::WindowSnap);
+ break;
+
+ case 3: // edge resistance
+ getScreen()->saveWindowToEdgeSnap(BScreen::WindowResistance);
+ break;
+ }
+ setValues();
+}
+
+
#ifdef XINERAMA
Configmenu::Xineramamenu::Xineramamenu(Configmenu *cm):
Basemenu(cm->getScreen()) {
diff --git a/src/Configmenu.hh b/src/Configmenu.hh
index 3ff3222d..489bd323 100644
--- a/src/Configmenu.hh
+++ b/src/Configmenu.hh
@@ -61,6 +61,34 @@ private:
virtual void reconfigure(void);
};
+ class WindowToWindowSnapmenu : public Basemenu {
+ private:
+ WindowToWindowSnapmenu(const WindowToWindowSnapmenu&);
+ WindowToWindowSnapmenu& operator=(const WindowToWindowSnapmenu&);
+
+ protected:
+ virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
+
+ public:
+ WindowToWindowSnapmenu(Configmenu *cm);
+ virtual void reconfigure(void);
+ };
+
+ class WindowToEdgeSnapmenu : public Basemenu {
+ private:
+ WindowToEdgeSnapmenu(const WindowToEdgeSnapmenu&);
+ WindowToEdgeSnapmenu& operator=(const WindowToEdgeSnapmenu&);
+
+ protected:
+ virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
+
+ public:
+ WindowToEdgeSnapmenu(Configmenu *cm);
+ virtual void reconfigure(void);
+ };
+
#ifdef XINERAMA
class Xineramamenu : public Basemenu {
private:
@@ -79,12 +107,14 @@ private:
Focusmenu *focusmenu;
Placementmenu *placementmenu;
+ WindowToWindowSnapmenu *windowsnapmenu;
+ WindowToEdgeSnapmenu *edgesnapmenu;
#ifdef XINERAMA
Xineramamenu *xineramamenu;
#endif // XINERAMA
- friend class Focusmenu;
- friend class Placementmenu;
+// friend class Focusmenu;
+// friend class Placementmenu;
Configmenu(const Configmenu&);
Configmenu& operator=(const Configmenu&);