add Left and Right contexts for resizing
This commit is contained in:
parent
2f541b6ef3
commit
b26635fe99
6 changed files with 86 additions and 1 deletions
18
data/rc.xml
18
data/rc.xml
|
@ -290,6 +290,24 @@
|
||||||
</mousebind>
|
</mousebind>
|
||||||
</context>
|
</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">
|
<context name="Bottom">
|
||||||
<mousebind button="Left" action="Press">
|
<mousebind button="Left" action="Press">
|
||||||
<action name="Activate"/>
|
<action name="Activate"/>
|
||||||
|
|
|
@ -342,6 +342,8 @@
|
||||||
<xsd:enumeration value="BRCorner"/>
|
<xsd:enumeration value="BRCorner"/>
|
||||||
<xsd:enumeration value="Top"/>
|
<xsd:enumeration value="Top"/>
|
||||||
<xsd:enumeration value="Bottom"/>
|
<xsd:enumeration value="Bottom"/>
|
||||||
|
<xsd:enumeration value="Left"/>
|
||||||
|
<xsd:enumeration value="Right"/>
|
||||||
<xsd:enumeration value="Maximize"/>
|
<xsd:enumeration value="Maximize"/>
|
||||||
<xsd:enumeration value="AllDesktops"/>
|
<xsd:enumeration value="AllDesktops"/>
|
||||||
<xsd:enumeration value="Shade"/>
|
<xsd:enumeration value="Shade"/>
|
||||||
|
|
|
@ -296,6 +296,30 @@
|
||||||
</mousebind>
|
</mousebind>
|
||||||
</context>
|
</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">
|
<context name="Handle">
|
||||||
<mousebind button="Left" action="Press">
|
<mousebind button="Left" action="Press">
|
||||||
<action name="Focus"/>
|
<action name="Focus"/>
|
||||||
|
|
|
@ -138,6 +138,11 @@ ObFrame *frame_new(ObClient *client)
|
||||||
self->trtresize = createWindow(self->title, NULL, mask, &attrib);
|
self->trtresize = createWindow(self->title, NULL, mask, &attrib);
|
||||||
self->trrresize = 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;
|
mask &= ~CWCursor;
|
||||||
self->label = createWindow(self->title, NULL, mask, &attrib);
|
self->label = createWindow(self->title, NULL, mask, &attrib);
|
||||||
self->max = 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->handle, self->rbwidth);
|
||||||
XSetWindowBorderWidth(ob_display, self->lgrip, self->rbwidth);
|
XSetWindowBorderWidth(ob_display, self->lgrip, self->rbwidth);
|
||||||
XSetWindowBorderWidth(ob_display, self->rgrip, 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)
|
if (self->decorations & OB_FRAME_DECOR_TITLEBAR)
|
||||||
|
@ -391,17 +398,35 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
|
||||||
XMoveWindow(ob_display, self->trrresize,
|
XMoveWindow(ob_display, self->trrresize,
|
||||||
self->width - ob_rr_theme->paddingx - 1, 0);
|
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->topresize);
|
||||||
XMapWindow(ob_display, self->tltresize);
|
XMapWindow(ob_display, self->tltresize);
|
||||||
XMapWindow(ob_display, self->tllresize);
|
XMapWindow(ob_display, self->tllresize);
|
||||||
XMapWindow(ob_display, self->trtresize);
|
XMapWindow(ob_display, self->trtresize);
|
||||||
XMapWindow(ob_display, self->trrresize);
|
XMapWindow(ob_display, self->trrresize);
|
||||||
|
XMapWindow(ob_display, self->leftresize);
|
||||||
|
XMapWindow(ob_display, self->rightresize);
|
||||||
} else {
|
} else {
|
||||||
XUnmapWindow(ob_display, self->topresize);
|
XUnmapWindow(ob_display, self->topresize);
|
||||||
XUnmapWindow(ob_display, self->tltresize);
|
XUnmapWindow(ob_display, self->tltresize);
|
||||||
XUnmapWindow(ob_display, self->tllresize);
|
XUnmapWindow(ob_display, self->tllresize);
|
||||||
XUnmapWindow(ob_display, self->trtresize);
|
XUnmapWindow(ob_display, self->trtresize);
|
||||||
XUnmapWindow(ob_display, self->trrresize);
|
XUnmapWindow(ob_display, self->trrresize);
|
||||||
|
XUnmapWindow(ob_display, self->leftresize);
|
||||||
|
XUnmapWindow(ob_display, self->rightresize);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
XUnmapWindow(ob_display, self->title);
|
XUnmapWindow(ob_display, self->title);
|
||||||
|
@ -560,6 +585,7 @@ void frame_grab_client(ObFrame *self)
|
||||||
{
|
{
|
||||||
/* reparent the client to the frame */
|
/* reparent the client to the frame */
|
||||||
XReparentWindow(ob_display, self->client->window, self->plate, 0, 0);
|
XReparentWindow(ob_display, self->client->window, self->plate, 0, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
When reparenting the client window, it is usually not mapped yet, since
|
When reparenting the client window, it is usually not mapped yet, since
|
||||||
this occurs from a MapRequest. However, in the case where Openbox is
|
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->tllresize, self->client);
|
||||||
g_hash_table_insert(window_map, &self->trtresize, 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->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)
|
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->tllresize);
|
||||||
g_hash_table_remove(window_map, &self->trtresize);
|
g_hash_table_remove(window_map, &self->trtresize);
|
||||||
g_hash_table_remove(window_map, &self->trrresize);
|
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);
|
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;
|
return OB_FRAME_CONTEXT_TOP;
|
||||||
else if (!g_ascii_strcasecmp("Bottom", name))
|
else if (!g_ascii_strcasecmp("Bottom", name))
|
||||||
return OB_FRAME_CONTEXT_BOTTOM;
|
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))
|
else if (!g_ascii_strcasecmp("Maximize", name))
|
||||||
return OB_FRAME_CONTEXT_MAXIMIZE;
|
return OB_FRAME_CONTEXT_MAXIMIZE;
|
||||||
else if (!g_ascii_strcasecmp("AllDesktops", name))
|
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->tllresize) return OB_FRAME_CONTEXT_TLCORNER;
|
||||||
if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER;
|
if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER;
|
||||||
if (win == self->trrresize) 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->max) return OB_FRAME_CONTEXT_MAXIMIZE;
|
||||||
if (win == self->iconify) return OB_FRAME_CONTEXT_ICONIFY;
|
if (win == self->iconify) return OB_FRAME_CONTEXT_ICONIFY;
|
||||||
if (win == self->close) return OB_FRAME_CONTEXT_CLOSE;
|
if (win == self->close) return OB_FRAME_CONTEXT_CLOSE;
|
||||||
|
|
|
@ -41,6 +41,8 @@ typedef enum {
|
||||||
OB_FRAME_CONTEXT_TRCORNER,
|
OB_FRAME_CONTEXT_TRCORNER,
|
||||||
OB_FRAME_CONTEXT_TOP,
|
OB_FRAME_CONTEXT_TOP,
|
||||||
OB_FRAME_CONTEXT_BOTTOM,
|
OB_FRAME_CONTEXT_BOTTOM,
|
||||||
|
OB_FRAME_CONTEXT_LEFT,
|
||||||
|
OB_FRAME_CONTEXT_RIGHT,
|
||||||
OB_FRAME_CONTEXT_MAXIMIZE,
|
OB_FRAME_CONTEXT_MAXIMIZE,
|
||||||
OB_FRAME_CONTEXT_ALLDESKTOPS,
|
OB_FRAME_CONTEXT_ALLDESKTOPS,
|
||||||
OB_FRAME_CONTEXT_SHADE,
|
OB_FRAME_CONTEXT_SHADE,
|
||||||
|
@ -101,6 +103,8 @@ struct _ObFrame
|
||||||
Window tllresize;
|
Window tllresize;
|
||||||
Window trtresize;
|
Window trtresize;
|
||||||
Window trrresize;
|
Window trrresize;
|
||||||
|
Window leftresize;
|
||||||
|
Window rightresize;
|
||||||
|
|
||||||
Colormap colormap;
|
Colormap colormap;
|
||||||
|
|
||||||
|
|
|
@ -47,11 +47,12 @@ void framerender_frame(ObFrame *self)
|
||||||
RrColorPixel(ob_rr_theme->frame_focused_border_color) :
|
RrColorPixel(ob_rr_theme->frame_focused_border_color) :
|
||||||
RrColorPixel(ob_rr_theme->frame_unfocused_border_color));
|
RrColorPixel(ob_rr_theme->frame_unfocused_border_color));
|
||||||
XSetWindowBorder(ob_display, self->window, px);
|
XSetWindowBorder(ob_display, self->window, px);
|
||||||
XSetWindowBorder(ob_display, self->inner, px);
|
|
||||||
XSetWindowBorder(ob_display, self->title, px);
|
XSetWindowBorder(ob_display, self->title, px);
|
||||||
XSetWindowBorder(ob_display, self->handle, px);
|
XSetWindowBorder(ob_display, self->handle, px);
|
||||||
XSetWindowBorder(ob_display, self->rgrip, px);
|
XSetWindowBorder(ob_display, self->rgrip, px);
|
||||||
XSetWindowBorder(ob_display, self->lgrip, 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) {
|
if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
|
||||||
|
|
Loading…
Reference in a new issue