get rid of the plate window
This commit is contained in:
parent
a1511e4655
commit
2aa0a6b01b
5 changed files with 16 additions and 50 deletions
|
@ -361,7 +361,6 @@ void client_manage(Window window)
|
||||||
/* adjust the frame to the client's size before showing or placing
|
/* adjust the frame to the client's size before showing or placing
|
||||||
the window */
|
the window */
|
||||||
frame_adjust_area(self->frame, FALSE, TRUE, FALSE);
|
frame_adjust_area(self->frame, FALSE, TRUE, FALSE);
|
||||||
frame_adjust_client_area(self->frame);
|
|
||||||
|
|
||||||
/* where the frame was placed is where the window was originally */
|
/* where the frame was placed is where the window was originally */
|
||||||
placex = self->area.x;
|
placex = self->area.x;
|
||||||
|
@ -570,7 +569,7 @@ void client_manage(Window window)
|
||||||
g_free(settings);
|
g_free(settings);
|
||||||
|
|
||||||
ob_debug("Managed window 0x%lx plate 0x%x (%s)\n",
|
ob_debug("Managed window 0x%lx plate 0x%x (%s)\n",
|
||||||
window, self->frame->plate, self->class);
|
window, self->frame->window, self->class);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -621,7 +620,7 @@ void client_unmanage(ObClient *self)
|
||||||
GSList *it;
|
GSList *it;
|
||||||
|
|
||||||
ob_debug("Unmanaging window: 0x%x plate 0x%x (%s) (%s)\n",
|
ob_debug("Unmanaging window: 0x%x plate 0x%x (%s) (%s)\n",
|
||||||
self->window, self->frame->plate,
|
self->window, self->frame->window,
|
||||||
self->class, self->title ? self->title : "");
|
self->class, self->title ? self->title : "");
|
||||||
|
|
||||||
g_assert(self != NULL);
|
g_assert(self != NULL);
|
||||||
|
@ -2857,16 +2856,14 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gint b,
|
||||||
/* if the client is enlarging, then resize the client before the frame */
|
/* if the client is enlarging, then resize the client before the frame */
|
||||||
if (send_resize_client && (w > oldw || h > oldh)) {
|
if (send_resize_client && (w > oldw || h > oldh)) {
|
||||||
XWindowChanges changes;
|
XWindowChanges changes;
|
||||||
changes.x = -self->border_width;
|
changes.x = self->frame->size.left - self->border_width;
|
||||||
changes.y = -self->border_width;
|
changes.y = self->frame->size.top -self->border_width;
|
||||||
changes.width = MAX(w, oldw);
|
changes.width = MAX(w, oldw);
|
||||||
changes.height = MAX(h, oldh);
|
changes.height = MAX(h, oldh);
|
||||||
changes.border_width = self->border_width;
|
changes.border_width = self->border_width;
|
||||||
XConfigureWindow(ob_display, self->window,
|
XConfigureWindow(ob_display, self->window,
|
||||||
CWX|CWY|CWWidth|CWHeight|CWBorderWidth,
|
CWX|CWY|CWWidth|CWHeight|CWBorderWidth,
|
||||||
&changes);
|
&changes);
|
||||||
/* resize the plate to show the client padding color underneath */
|
|
||||||
frame_adjust_client_area(self->frame);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the frame's dimensions and move/resize it */
|
/* find the frame's dimensions and move/resize it */
|
||||||
|
@ -2918,13 +2915,10 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gint b,
|
||||||
|
|
||||||
/* if the client is shrinking, then resize the frame before the client */
|
/* if the client is shrinking, then resize the frame before the client */
|
||||||
if (send_resize_client && (w <= oldw && h <= oldh)) {
|
if (send_resize_client && (w <= oldw && h <= oldh)) {
|
||||||
/* resize the plate to show the client padding color underneath */
|
|
||||||
frame_adjust_client_area(self->frame);
|
|
||||||
|
|
||||||
if (send_resize_client) {
|
if (send_resize_client) {
|
||||||
XWindowChanges changes;
|
XWindowChanges changes;
|
||||||
changes.x = -self->border_width;
|
changes.x = self->frame->size.left - self->border_width;
|
||||||
changes.y = -self->border_width;
|
changes.y = self->frame->size.top -self->border_width;
|
||||||
changes.width = w;
|
changes.width = w;
|
||||||
changes.height = h;
|
changes.height = h;
|
||||||
changes.border_width = self->border_width;
|
changes.border_width = self->border_width;
|
||||||
|
|
|
@ -1171,7 +1171,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
break;
|
break;
|
||||||
case ReparentNotify:
|
case ReparentNotify:
|
||||||
/* this is when the client is first taken captive in the frame */
|
/* this is when the client is first taken captive in the frame */
|
||||||
if (e->xreparent.parent == client->frame->plate) break;
|
if (e->xreparent.parent == client->frame->window) break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This event is quite rare and is usually handled in unmapHandler.
|
This event is quite rare and is usually handled in unmapHandler.
|
||||||
|
|
|
@ -31,9 +31,9 @@
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "render/theme.h"
|
#include "render/theme.h"
|
||||||
|
|
||||||
#define PLATE_EVENTMASK (SubstructureRedirectMask | FocusChangeMask)
|
|
||||||
#define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
|
#define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
|
||||||
ButtonPressMask | ButtonReleaseMask)
|
ButtonPressMask | ButtonReleaseMask | \
|
||||||
|
SubstructureRedirectMask | FocusChangeMask)
|
||||||
#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
|
#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
|
||||||
ButtonMotionMask | PointerMotionMask | \
|
ButtonMotionMask | PointerMotionMask | \
|
||||||
EnterWindowMask | LeaveWindowMask)
|
EnterWindowMask | LeaveWindowMask)
|
||||||
|
@ -95,7 +95,7 @@ ObFrame *frame_new(ObClient *client)
|
||||||
|
|
||||||
/* create the non-visible decor windows */
|
/* create the non-visible decor windows */
|
||||||
|
|
||||||
mask = CWEventMask;
|
mask = 0;
|
||||||
if (visual) {
|
if (visual) {
|
||||||
/* client has a 32-bit visual */
|
/* client has a 32-bit visual */
|
||||||
mask |= CWColormap | CWBackPixel | CWBorderPixel;
|
mask |= CWColormap | CWBackPixel | CWBorderPixel;
|
||||||
|
@ -107,13 +107,9 @@ ObFrame *frame_new(ObClient *client)
|
||||||
attrib.background_pixel = BlackPixel(ob_display, ob_screen);
|
attrib.background_pixel = BlackPixel(ob_display, ob_screen);
|
||||||
attrib.border_pixel = BlackPixel(ob_display, ob_screen);
|
attrib.border_pixel = BlackPixel(ob_display, ob_screen);
|
||||||
}
|
}
|
||||||
attrib.event_mask = FRAME_EVENTMASK;
|
|
||||||
self->window = createWindow(RootWindow(ob_display, ob_screen), visual,
|
self->window = createWindow(RootWindow(ob_display, ob_screen), visual,
|
||||||
mask, &attrib);
|
mask, &attrib);
|
||||||
|
|
||||||
mask &= ~CWEventMask;
|
|
||||||
self->plate = createWindow(self->window, visual, mask, &attrib);
|
|
||||||
|
|
||||||
/* create the visible decor windows */
|
/* create the visible decor windows */
|
||||||
|
|
||||||
mask = CWEventMask;
|
mask = CWEventMask;
|
||||||
|
@ -172,7 +168,6 @@ ObFrame *frame_new(ObClient *client)
|
||||||
self->focused = FALSE;
|
self->focused = FALSE;
|
||||||
|
|
||||||
/* the other stuff is shown based on decor settings */
|
/* the other stuff is shown based on decor settings */
|
||||||
XMapWindow(ob_display, self->plate);
|
|
||||||
XMapWindow(ob_display, self->label);
|
XMapWindow(ob_display, self->label);
|
||||||
|
|
||||||
self->max_press = self->close_press = self->desk_press =
|
self->max_press = self->close_press = self->desk_press =
|
||||||
|
@ -710,14 +705,10 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
|
||||||
} else
|
} else
|
||||||
XUnmapWindow(ob_display, self->right);
|
XUnmapWindow(ob_display, self->right);
|
||||||
|
|
||||||
/* move the plate */
|
|
||||||
XMoveWindow(ob_display, self->plate,
|
|
||||||
self->size.left, self->size.top);
|
|
||||||
|
|
||||||
/* when the client has StaticGravity, it likes to move around. */
|
/* when the client has StaticGravity, it likes to move around. */
|
||||||
XMoveWindow(ob_display, self->client->window,
|
XMoveWindow(ob_display, self->client->window,
|
||||||
-self->client->border_width,
|
self->size.left - self->client->border_width,
|
||||||
-self->client->border_width);
|
self->size.top - self->client->border_width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -836,13 +827,6 @@ static void frame_adjust_cursors(ObFrame *self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void frame_adjust_client_area(ObFrame *self)
|
|
||||||
{
|
|
||||||
/* resize the plate */
|
|
||||||
XResizeWindow(ob_display, self->plate,
|
|
||||||
self->client->area.width, self->client->area.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void frame_adjust_state(ObFrame *self)
|
void frame_adjust_state(ObFrame *self)
|
||||||
{
|
{
|
||||||
framerender_frame(self);
|
framerender_frame(self);
|
||||||
|
@ -873,8 +857,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,
|
XReparentWindow(ob_display, self->client->window, self->window, 0, 0);
|
||||||
-self->client->border_width, -self->client->border_width);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
When reparenting the client window, it is usually not mapped yet, since
|
When reparenting the client window, it is usually not mapped yet, since
|
||||||
|
@ -887,11 +870,10 @@ void frame_grab_client(ObFrame *self)
|
||||||
|
|
||||||
/* select the event mask on the client's parent (to receive config/map
|
/* select the event mask on the client's parent (to receive config/map
|
||||||
req's) the ButtonPress is to catch clicks on the client border */
|
req's) the ButtonPress is to catch clicks on the client border */
|
||||||
XSelectInput(ob_display, self->plate, PLATE_EVENTMASK);
|
XSelectInput(ob_display, self->window, FRAME_EVENTMASK);
|
||||||
|
|
||||||
/* set all the windows for the frame in the window_map */
|
/* set all the windows for the frame in the window_map */
|
||||||
g_hash_table_insert(window_map, &self->window, self->client);
|
g_hash_table_insert(window_map, &self->window, self->client);
|
||||||
g_hash_table_insert(window_map, &self->plate, self->client);
|
|
||||||
g_hash_table_insert(window_map, &self->innerleft, self->client);
|
g_hash_table_insert(window_map, &self->innerleft, self->client);
|
||||||
g_hash_table_insert(window_map, &self->innertop, self->client);
|
g_hash_table_insert(window_map, &self->innertop, self->client);
|
||||||
g_hash_table_insert(window_map, &self->innerright, self->client);
|
g_hash_table_insert(window_map, &self->innerright, self->client);
|
||||||
|
@ -952,7 +934,7 @@ void frame_release_client(ObFrame *self)
|
||||||
Reparent events that are generated by us are just discarded here.
|
Reparent events that are generated by us are just discarded here.
|
||||||
They are of no consequence to us anyhow.
|
They are of no consequence to us anyhow.
|
||||||
*/
|
*/
|
||||||
if (ev.xreparent.parent != self->plate) {
|
if (ev.xreparent.parent != self->window) {
|
||||||
reparent = FALSE;
|
reparent = FALSE;
|
||||||
XPutBackEvent(ob_display, &ev);
|
XPutBackEvent(ob_display, &ev);
|
||||||
break;
|
break;
|
||||||
|
@ -970,7 +952,6 @@ void frame_release_client(ObFrame *self)
|
||||||
|
|
||||||
/* remove all the windows for the frame from the window_map */
|
/* remove all the windows for the frame from the window_map */
|
||||||
g_hash_table_remove(window_map, &self->window);
|
g_hash_table_remove(window_map, &self->window);
|
||||||
g_hash_table_remove(window_map, &self->plate);
|
|
||||||
g_hash_table_remove(window_map, &self->innerleft);
|
g_hash_table_remove(window_map, &self->innerleft);
|
||||||
g_hash_table_remove(window_map, &self->innertop);
|
g_hash_table_remove(window_map, &self->innertop);
|
||||||
g_hash_table_remove(window_map, &self->innerright);
|
g_hash_table_remove(window_map, &self->innerright);
|
||||||
|
@ -1250,13 +1231,6 @@ ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y)
|
||||||
}
|
}
|
||||||
|
|
||||||
self = client->frame;
|
self = client->frame;
|
||||||
if (win == self->plate) {
|
|
||||||
/* conceptually, this is the desktop, as far as users are
|
|
||||||
concerned */
|
|
||||||
if (client->type == OB_CLIENT_TYPE_DESKTOP)
|
|
||||||
return OB_FRAME_CONTEXT_DESKTOP;
|
|
||||||
return OB_FRAME_CONTEXT_CLIENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* when the user clicks in the corners of the titlebar and the client
|
/* when the user clicks in the corners of the titlebar and the client
|
||||||
is fully maximized, then treat it like they clicked in the
|
is fully maximized, then treat it like they clicked in the
|
||||||
|
|
|
@ -77,7 +77,6 @@ struct _ObFrame
|
||||||
struct _ObClient *client;
|
struct _ObClient *client;
|
||||||
|
|
||||||
Window window;
|
Window window;
|
||||||
Window plate;
|
|
||||||
|
|
||||||
Strut size;
|
Strut size;
|
||||||
Rect area;
|
Rect area;
|
||||||
|
@ -203,7 +202,6 @@ void frame_adjust_theme(ObFrame *self);
|
||||||
void frame_adjust_shape(ObFrame *self);
|
void frame_adjust_shape(ObFrame *self);
|
||||||
void frame_adjust_area(ObFrame *self, gboolean moved,
|
void frame_adjust_area(ObFrame *self, gboolean moved,
|
||||||
gboolean resized, gboolean fake);
|
gboolean resized, gboolean fake);
|
||||||
void frame_adjust_client_area(ObFrame *self);
|
|
||||||
void frame_adjust_state(ObFrame *self);
|
void frame_adjust_state(ObFrame *self);
|
||||||
void frame_adjust_focus(ObFrame *self, gboolean hilite);
|
void frame_adjust_focus(ObFrame *self, gboolean hilite);
|
||||||
void frame_adjust_title(ObFrame *self);
|
void frame_adjust_title(ObFrame *self);
|
||||||
|
|
|
@ -119,7 +119,7 @@ void mouse_grab_for_client(ObClient *client, gboolean grab)
|
||||||
mode = GrabModeAsync;
|
mode = GrabModeAsync;
|
||||||
mask = ButtonPressMask | ButtonMotionMask | ButtonReleaseMask;
|
mask = ButtonPressMask | ButtonMotionMask | ButtonReleaseMask;
|
||||||
} else if (CLIENT_CONTEXT(i, client)) {
|
} else if (CLIENT_CONTEXT(i, client)) {
|
||||||
win = client->frame->plate;
|
win = client->window;
|
||||||
mode = GrabModeSync; /* this is handled in event */
|
mode = GrabModeSync; /* this is handled in event */
|
||||||
mask = ButtonPressMask; /* can't catch more than this with Sync
|
mask = ButtonPressMask; /* can't catch more than this with Sync
|
||||||
mode the release event is
|
mode the release event is
|
||||||
|
|
Loading…
Reference in a new issue