diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-05-19 21:39:40 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-05-19 21:39:40 +0000 |
| commit | b26635fe994a7cd1dc28893c0e40517b61036a9f (patch) | |
| tree | 98d89eea8ac4c4fd03b49a63b40f200b6eee35e9 | |
| parent | 2f541b6ef3fdc0fc1c7604c068b82d9e64b90354 (diff) | |
add Left and Right contexts for resizing
| -rw-r--r-- | data/rc.xml | 18 | ||||
| -rw-r--r-- | data/rc.xsd | 2 | ||||
| -rw-r--r-- | doc/rc-mouse-focus.xml | 24 | ||||
| -rw-r--r-- | openbox/frame.c | 36 | ||||
| -rw-r--r-- | openbox/frame.h | 4 | ||||
| -rw-r--r-- | openbox/framerender.c | 3 |
6 files changed, 86 insertions, 1 deletions
diff --git a/data/rc.xml b/data/rc.xml index edfba5f4..d963936f 100644 --- a/data/rc.xml +++ b/data/rc.xml @@ -290,6 +290,24 @@ </mousebind> </context> + <context name="Left"> + <mousebind button="Left" action="Press"> + <action name="Activate"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"><edge>left</edge></action> + </mousebind> + </context> + + <context name="Right"> + <mousebind button="Left" action="Press"> + <action name="Activate"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"><edge>right</edge></action> + </mousebind> + </context> + <context name="Bottom"> <mousebind button="Left" action="Press"> <action name="Activate"/> diff --git a/data/rc.xsd b/data/rc.xsd index 83af035f..4b790148 100644 --- a/data/rc.xsd +++ b/data/rc.xsd @@ -342,6 +342,8 @@ <xsd:enumeration value="BRCorner"/> <xsd:enumeration value="Top"/> <xsd:enumeration value="Bottom"/> + <xsd:enumeration value="Left"/> + <xsd:enumeration value="Right"/> <xsd:enumeration value="Maximize"/> <xsd:enumeration value="AllDesktops"/> <xsd:enumeration value="Shade"/> diff --git a/doc/rc-mouse-focus.xml b/doc/rc-mouse-focus.xml index ce8ca2a0..c1351cac 100644 --- a/doc/rc-mouse-focus.xml +++ b/doc/rc-mouse-focus.xml @@ -296,6 +296,30 @@ </mousebind> </context> + <context name="Left"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"><edge>top</edge></action> + </mousebind> + </context> + + <context name="Right"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"><edge>top</edge></action> + </mousebind> + </context> + <context name="Handle"> <mousebind button="Left" action="Press"> <action name="Focus"/> diff --git a/openbox/frame.c b/openbox/frame.c index 5ee05530..c9c1543d 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -138,6 +138,11 @@ ObFrame *frame_new(ObClient *client) self->trtresize = createWindow(self->title, NULL, mask, &attrib); self->trrresize = createWindow(self->title, NULL, mask, &attrib); + attrib.cursor = ob_cursor(OB_CURSOR_WEST); + self->leftresize = createWindow(self->inner, NULL, mask, &attrib); + attrib.cursor = ob_cursor(OB_CURSOR_EAST); + self->rightresize = createWindow(self->inner, NULL, mask, &attrib); + mask &= ~CWCursor; self->label = createWindow(self->title, NULL, mask, &attrib); self->max = createWindow(self->title, NULL, mask, &attrib); @@ -357,6 +362,8 @@ void frame_adjust_area(ObFrame *self, gboolean moved, XSetWindowBorderWidth(ob_display, self->handle, self->rbwidth); XSetWindowBorderWidth(ob_display, self->lgrip, self->rbwidth); XSetWindowBorderWidth(ob_display, self->rgrip, self->rbwidth); + XSetWindowBorderWidth(ob_display, self->leftresize, self->bwidth); + XSetWindowBorderWidth(ob_display, self->rightresize, self->bwidth); } if (self->decorations & OB_FRAME_DECOR_TITLEBAR) @@ -391,17 +398,35 @@ void frame_adjust_area(ObFrame *self, gboolean moved, XMoveWindow(ob_display, self->trrresize, self->width - ob_rr_theme->paddingx - 1, 0); + XMoveResizeWindow(ob_display, self->leftresize, + -(ob_rr_theme->fbwidth * 2) - 1, + 0, + 1, + self->client->area.height + + self->cbwidth_y * 2); + XMoveResizeWindow(ob_display, self->rightresize, + self->client->area.width + + self->cbwidth_x * 2, + 0, + 1, + self->client->area.height + + self->cbwidth_y * 2); + XMapWindow(ob_display, self->topresize); XMapWindow(ob_display, self->tltresize); XMapWindow(ob_display, self->tllresize); XMapWindow(ob_display, self->trtresize); XMapWindow(ob_display, self->trrresize); + XMapWindow(ob_display, self->leftresize); + XMapWindow(ob_display, self->rightresize); } else { XUnmapWindow(ob_display, self->topresize); XUnmapWindow(ob_display, self->tltresize); XUnmapWindow(ob_display, self->tllresize); XUnmapWindow(ob_display, self->trtresize); XUnmapWindow(ob_display, self->trrresize); + XUnmapWindow(ob_display, self->leftresize); + XUnmapWindow(ob_display, self->rightresize); } } else XUnmapWindow(ob_display, self->title); @@ -560,6 +585,7 @@ void frame_grab_client(ObFrame *self) { /* reparent the client to the frame */ XReparentWindow(ob_display, self->client->window, self->plate, 0, 0); + /* When reparenting the client window, it is usually not mapped yet, since this occurs from a MapRequest. However, in the case where Openbox is @@ -598,6 +624,8 @@ void frame_grab_client(ObFrame *self) g_hash_table_insert(window_map, &self->tllresize, self->client); g_hash_table_insert(window_map, &self->trtresize, self->client); g_hash_table_insert(window_map, &self->trrresize, self->client); + g_hash_table_insert(window_map, &self->leftresize, self->client); + g_hash_table_insert(window_map, &self->rightresize, self->client); } void frame_release_client(ObFrame *self) @@ -656,6 +684,8 @@ void frame_release_client(ObFrame *self) g_hash_table_remove(window_map, &self->tllresize); g_hash_table_remove(window_map, &self->trtresize); g_hash_table_remove(window_map, &self->trrresize); + g_hash_table_remove(window_map, &self->leftresize); + g_hash_table_remove(window_map, &self->rightresize); ob_main_loop_timeout_remove_data(ob_main_loop, flash_timeout, self, TRUE); } @@ -849,6 +879,10 @@ ObFrameContext frame_context_from_string(const gchar *name) return OB_FRAME_CONTEXT_TOP; else if (!g_ascii_strcasecmp("Bottom", name)) return OB_FRAME_CONTEXT_BOTTOM; + else if (!g_ascii_strcasecmp("Left", name)) + return OB_FRAME_CONTEXT_LEFT; + else if (!g_ascii_strcasecmp("Right", name)) + return OB_FRAME_CONTEXT_RIGHT; else if (!g_ascii_strcasecmp("Maximize", name)) return OB_FRAME_CONTEXT_MAXIMIZE; else if (!g_ascii_strcasecmp("AllDesktops", name)) @@ -926,6 +960,8 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y) if (win == self->tllresize) return OB_FRAME_CONTEXT_TLCORNER; if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER; if (win == self->trrresize) return OB_FRAME_CONTEXT_TRCORNER; + if (win == self->leftresize) return OB_FRAME_CONTEXT_LEFT; + if (win == self->rightresize) return OB_FRAME_CONTEXT_RIGHT; if (win == self->max) return OB_FRAME_CONTEXT_MAXIMIZE; if (win == self->iconify) return OB_FRAME_CONTEXT_ICONIFY; if (win == self->close) return OB_FRAME_CONTEXT_CLOSE; diff --git a/openbox/frame.h b/openbox/frame.h index 0f563432..28ad2755 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -41,6 +41,8 @@ typedef enum { OB_FRAME_CONTEXT_TRCORNER, OB_FRAME_CONTEXT_TOP, OB_FRAME_CONTEXT_BOTTOM, + OB_FRAME_CONTEXT_LEFT, + OB_FRAME_CONTEXT_RIGHT, OB_FRAME_CONTEXT_MAXIMIZE, OB_FRAME_CONTEXT_ALLDESKTOPS, OB_FRAME_CONTEXT_SHADE, @@ -101,6 +103,8 @@ struct _ObFrame Window tllresize; Window trtresize; Window trrresize; + Window leftresize; + Window rightresize; Colormap colormap; diff --git a/openbox/framerender.c b/openbox/framerender.c index 82a98a8e..78c1d02f 100644 --- a/openbox/framerender.c +++ b/openbox/framerender.c @@ -47,11 +47,12 @@ void framerender_frame(ObFrame *self) RrColorPixel(ob_rr_theme->frame_focused_border_color) : RrColorPixel(ob_rr_theme->frame_unfocused_border_color)); XSetWindowBorder(ob_display, self->window, px); - XSetWindowBorder(ob_display, self->inner, px); XSetWindowBorder(ob_display, self->title, px); XSetWindowBorder(ob_display, self->handle, px); XSetWindowBorder(ob_display, self->rgrip, px); XSetWindowBorder(ob_display, self->lgrip, px); + XSetWindowBorder(ob_display, self->leftresize, px); + XSetWindowBorder(ob_display, self->rightresize, px); } if (self->decorations & OB_FRAME_DECOR_TITLEBAR) { |
