aboutsummaryrefslogtreecommitdiff
path: root/src/dminiwm.c
diff options
context:
space:
mode:
authormoetunes <moetunes111@gmail.com>2011-10-15 10:05:37 +1000
committermoetunes <moetunes111@gmail.com>2011-10-15 10:05:37 +1000
commit28546a6982fa1b20f4b28ff05fc294f8ecca1e3b (patch)
tree7720cc9c9fd360596f62702e13f35bdac28e3103 /src/dminiwm.c
parentcfd3f3630e5779475e1f0b48af7d04ed3d0a0271 (diff)
Added having applications open on a specified desktop
Diffstat (limited to 'src/dminiwm.c')
-rw-r--r--src/dminiwm.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/dminiwm.c b/src/dminiwm.c
index 321b3c7..4029cf1 100644
--- a/src/dminiwm.c
+++ b/src/dminiwm.c
@@ -1,4 +1,4 @@
-/* dminiwm.c [ 0.1.2 ]
+/* dminiwm.c [ 0.1.3 ]
*
* I started this from catwm 31/12/10
* Bad window error checking and numlock checking used from
@@ -20,11 +20,13 @@
#include <X11/keysym.h>
//#include <X11/XF86keysym.h>
#include <X11/Xproto.h>
+#include <X11/Xutil.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
+#include <string.h>
#define TABLENGTH(X) (sizeof(X)/sizeof(*X))
@@ -60,6 +62,12 @@ struct desktop{
client *current;
};
+typedef struct {
+ const char *class;
+ int preferredd;
+ int followwin;
+} Convenience;
+
// Functions
static void add_window(Window w);
static void change_desktop(const Arg arg);
@@ -682,6 +690,35 @@ void maprequest(XEvent *e) {
return;
}
+ XClassHint ch = {0};
+ static unsigned int len = sizeof convenience / sizeof convenience[0];
+ int i = 0;
+ int tmp = current_desktop;
+ if(XGetClassHint(dis, ev->window, &ch))
+ for(i=0;i<len;i++)
+ if(strcmp(ch.res_class, convenience[i].class) == 0) {
+ fprintf(stdout, "%s will be moved....\n", ch.res_class);
+ save_desktop(tmp);
+ select_desktop(convenience[i].preferredd-1);
+ add_window(ev->window);
+ if(tmp == convenience[i].preferredd-1) {
+ XMapWindow(dis, ev->window);
+ tile();
+ update_current();
+ } else {
+ select_desktop(tmp);
+ }
+ if(convenience[i].followwin != 0) {
+ Arg a = {.i = convenience[i].preferredd-1};
+ change_desktop(a);
+ }
+ if(ch.res_class)
+ XFree(ch.res_class);
+ if(ch.res_name)
+ XFree(ch.res_name);
+ return;
+ }
+
add_window(ev->window);
XMapWindow(dis,ev->window);
tile();