X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=30bceae596787706e024eaffd351aec0e816c7ae;hb=ae04366751a726ae0f24967fb672bec778791c19;hp=67c771a703a0bfa26c818775c739634bdfd50482;hpb=420e6f87a6503b713e4d9047f809538ec0c60d41;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 67c771a7..30bceae5 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -166,7 +166,7 @@ void client_set_list() void client_manage_all() { - unsigned int i, j, nchild; + guint i, j, nchild; Window w, *children; XWMHints *wmhints; XWindowAttributes attrib; @@ -337,8 +337,8 @@ void client_manage(Window window) } if (ob_state() == OB_STATE_RUNNING) { - int x = self->area.x, ox = x; - int y = self->area.y, oy = y; + gint x = self->area.x, ox = x; + gint y = self->area.y, oy = y; place_client(self, &x, &y); @@ -493,10 +493,9 @@ void client_unmanage(ObClient *self) PROP_ERASE(self->window, net_wm_state); PROP_ERASE(self->window, wm_state); } else { - /* if we're left in an iconic state, the client wont be mapped. this is - bad, since we will no longer be managing the window on restart */ - if (self->iconic) - XMapWindow(ob_display, self->window); + /* if we're left in an unmapped state, the client wont be mapped. this + is bad, since we will no longer be managing the window on restart */ + XMapWindow(ob_display, self->window); } @@ -586,8 +585,8 @@ static void client_restore_session_stacking(ObClient *self) void client_move_onscreen(ObClient *self, gboolean rude) { - int x = self->area.x; - int y = self->area.y; + gint x = self->area.x; + gint y = self->area.y; if (client_find_onscreen(self, &x, &y, self->frame->area.width, self->frame->area.height, rude)) { @@ -595,11 +594,11 @@ void client_move_onscreen(ObClient *self, gboolean rude) } } -gboolean client_find_onscreen(ObClient *self, int *x, int *y, int w, int h, +gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h, gboolean rude) { Rect *a; - int ox = *x, oy = *y; + gint ox = *x, oy = *y; frame_client_gravity(self->frame, x, y); /* get where the frame would be */ @@ -649,8 +648,8 @@ static void client_toggle_border(ObClient *self, gboolean show) different position. when re-adding the border to the client, the same operation needs to be reversed. */ - int oldx = self->area.x, oldy = self->area.y; - int x = oldx, y = oldy; + gint oldx = self->area.x, oldy = self->area.y; + gint x = oldx, y = oldy; switch(self->gravity) { default: case NorthWestGravity: @@ -851,15 +850,15 @@ static void client_get_state(ObClient *self) } if (!(self->above || self->below)) { - if (client_has_group_siblings(self)) { + if (self->group) { /* apply stuff from the group */ GSList *it; - gint layer = -1; + gint layer = -2; for (it = self->group->members; it; it = g_slist_next(it)) { ObClient *c = it->data; if (c != self && !client_search_transient(self, c) && - client_normal(c) == client_normal(self)) + client_normal(self) == client_normal(c)) { layer = MAX(layer, (c->above ? 1 : (c->below ? -1 : 0))); @@ -869,6 +868,7 @@ static void client_get_state(ObClient *self) case -1: self->below = TRUE; break; + case -2: case 0: break; case 1: @@ -887,9 +887,9 @@ static void client_get_shaped(ObClient *self) self->shaped = FALSE; #ifdef SHAPE if (extensions_shape) { - int foo; + gint foo; guint ufoo; - int s; + gint s; XShapeSelectInput(ob_display, self->window, ShapeNotifyMask); @@ -1083,8 +1083,8 @@ static void client_get_gravity(ObClient *self) void client_update_normal_hints(ObClient *self) { XSizeHints size; - long ret; - int oldgravity = self->gravity; + glong ret; + gint oldgravity = self->gravity; /* defaults */ self->min_ratio = 0.0f; @@ -1096,6 +1096,9 @@ void client_update_normal_hints(ObClient *self) /* get the hints from the window */ if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) { + /* normal windows can't request placement! har har + if (!client_normal(self)) + */ self->positioned = !!(size.flags & (PPosition|USPosition)); if (size.flags & PWinGravity) { @@ -1114,9 +1117,11 @@ void client_update_normal_hints(ObClient *self) if (size.flags & PAspect) { if (size.min_aspect.y) - self->min_ratio = (float)size.min_aspect.x / size.min_aspect.y; + self->min_ratio = + (gfloat) size.min_aspect.x / size.min_aspect.y; if (size.max_aspect.y) - self->max_ratio = (float)size.max_aspect.x / size.max_aspect.y; + self->max_ratio = + (gfloat) size.max_aspect.x / size.max_aspect.y; } if (size.flags & PMinSize) @@ -1264,7 +1269,7 @@ void client_setup_decor_and_functions(ObClient *self) static void client_change_allowed_actions(ObClient *self) { guint32 actions[9]; - int num = 0; + gint num = 0; /* desktop windows are kept on all desktops */ if (self->type != OB_CLIENT_TYPE_DESKTOP) @@ -1445,7 +1450,7 @@ void client_update_title(ObClient *self) } /* dont display the number for the first window */ if (self->title_count > 1) { - char *ndata; + gchar *ndata; ndata = g_strdup_printf("%s - [%u]", data, self->title_count); g_free(data); data = ndata; @@ -1475,7 +1480,7 @@ void client_update_title(ObClient *self) /* append the title count, dont display the number for the first window */ if (read_title && self->title_count > 1) { - char *vdata, *ndata; + gchar *vdata, *ndata; ndata = g_strdup_printf(" - [%u]", self->title_count); vdata = g_strconcat(data, ndata, NULL); g_free(ndata); @@ -1490,8 +1495,8 @@ void client_update_title(ObClient *self) void client_update_class(ObClient *self) { - char **data; - char *s; + gchar **data; + gchar *s; if (self->name) g_free(self->name); if (self->class) g_free(self->class); @@ -1538,10 +1543,19 @@ void client_update_strut(ObClient *self) if (!got && PROP_GETA32(self->window, net_wm_strut, cardinal, &data, &num)) { if (num == 4) { + const Rect *a; + got = TRUE; + + /* use the screen's width/height */ + a = screen_physical_area(); + STRUT_PARTIAL_SET(strut, data[0], data[2], data[1], data[3], - 0, 0, 0, 0, 0, 0, 0, 0); + a->y, a->y + a->height - 1, + a->x, a->x + a->width - 1, + a->y, a->y + a->height - 1, + a->x, a->x + a->width - 1); } g_free(data); } @@ -1796,12 +1810,31 @@ void client_calc_layer(ObClient *self) gboolean client_should_show(ObClient *self) { - if (self->iconic) return FALSE; - else if (!(self->desktop == screen_desktop || - self->desktop == DESKTOP_ALL)) return FALSE; - else if (client_normal(self) && screen_showing_desktop) return FALSE; + if (self->iconic) + return FALSE; + if (client_normal(self) && screen_showing_desktop) + return FALSE; + /* + if (self->transient_for) { + if (self->transient_for != OB_TRAN_GROUP) + return client_should_show(self->transient_for); + else { + GSList *it; + + for (it = self->group->members; it; it = g_slist_next(it)) { + ObClient *c = it->data; + if (c != self && !c->transient_for) { + if (client_should_show(c)) + return TRUE; + } + } + } + } + */ + if (self->desktop == screen_desktop || self->desktop == DESKTOP_ALL) + return TRUE; - return TRUE; + return FALSE; } static void client_showhide(ObClient *self) @@ -1863,7 +1896,7 @@ static void client_apply_startup_state(ObClient *self) } void client_configure_full(ObClient *self, ObCorner anchor, - int x, int y, int w, int h, + gint x, gint y, gint w, gint h, gboolean user, gboolean final, gboolean force_reply) { @@ -1886,7 +1919,7 @@ void client_configure_full(ObClient *self, ObCorner anchor, /* set the size and position if fullscreen */ if (self->fullscreen) { #ifdef VIDMODE - int dot; + gint dot; XF86VidModeModeLine mode; #endif Rect *a; @@ -1948,7 +1981,7 @@ void client_configure_full(ObClient *self, ObCorner anchor, } if (!(w == self->area.width && h == self->area.height)) { - int basew, baseh, minw, minh; + gint basew, baseh, minw, minh; /* base size is substituted with min size if not specified */ if (self->base_size.width || self->base_size.height) { @@ -2005,22 +2038,22 @@ void client_configure_full(ObClient *self, ObCorner anchor, if (self->min_ratio) if (h * self->min_ratio > w) { - h = (int)(w / self->min_ratio); + h = (gint)(w / self->min_ratio); /* you cannot resize to nothing */ if (h < 1) { h = 1; - w = (int)(h * self->min_ratio); + w = (gint)(h * self->min_ratio); } } if (self->max_ratio) if (h * self->max_ratio < w) { - h = (int)(w / self->max_ratio); + h = (gint)(w / self->max_ratio); /* you cannot resize to nothing */ if (h < 1) { h = 1; - w = (int)(h * self->min_ratio); + w = (gint)(h * self->min_ratio); } } @@ -2104,7 +2137,7 @@ void client_configure_full(ObClient *self, ObCorner anchor, void client_fullscreen(ObClient *self, gboolean fs, gboolean savearea) { - int x, y, w, h; + gint x, y, w, h; if (!(self->functions & OB_CLIENT_FUNC_FULLSCREEN) || /* can't */ self->fullscreen == fs) return; /* already done */ @@ -2164,7 +2197,7 @@ static void client_iconify_recursive(ObClient *self, if (iconic) { if (self->functions & OB_CLIENT_FUNC_ICONIFY) { - long old; + glong old; old = self->wmstate; self->wmstate = IconicState; @@ -2172,11 +2205,6 @@ static void client_iconify_recursive(ObClient *self, PROP_MSG(self->window, kde_wm_change_state, self->wmstate, 1, 0, 0); - self->ignore_unmaps++; - /* we unmap the client itself so that we can get MapRequest - events, and because the ICCCM tells us to! */ - XUnmapWindow(ob_display, self->window); - /* update the focus lists.. iconic windows go to the bottom of the list, put the new iconic window at the 'top of the bottom'. */ @@ -2185,7 +2213,7 @@ static void client_iconify_recursive(ObClient *self, changed = TRUE; } } else { - long old; + glong old; if (curdesk) client_set_desktop(self, screen_desktop, FALSE); @@ -2196,8 +2224,6 @@ static void client_iconify_recursive(ObClient *self, PROP_MSG(self->window, kde_wm_change_state, self->wmstate, 1, 0, 0); - XMapWindow(ob_display, self->window); - /* this puts it after the current focused window */ focus_order_remove(self); focus_order_add_new(self); @@ -2233,9 +2259,9 @@ void client_iconify(ObClient *self, gboolean iconic, gboolean curdesk) iconic, curdesk); } -void client_maximize(ObClient *self, gboolean max, int dir, gboolean savearea) +void client_maximize(ObClient *self, gboolean max, gint dir, gboolean savearea) { - int x, y, w, h; + gint x, y, w, h; g_assert(dir == 0 || dir == 1 || dir == 2); if (!(self->functions & OB_CLIENT_FUNC_MAXIMIZE)) return; /* can't */ @@ -2323,7 +2349,7 @@ void client_shade(ObClient *self, gboolean shade) /* when we're iconic, don't change the wmstate */ if (!self->iconic) { - long old; + glong old; old = self->wmstate; self->wmstate = shade ? IconicState : NormalState; @@ -2450,7 +2476,7 @@ gboolean client_validate(ObClient *self) return TRUE; } -void client_set_wm_state(ObClient *self, long state) +void client_set_wm_state(ObClient *self, glong state) { if (state == self->wmstate) return; /* no change */ @@ -2464,7 +2490,7 @@ void client_set_wm_state(ObClient *self, long state) } } -void client_set_state(ObClient *self, Atom action, long data1, long data2) +void client_set_state(ObClient *self, Atom action, glong data1, glong data2) { gboolean shaded = self->shaded; gboolean fullscreen = self->fullscreen; @@ -2472,7 +2498,7 @@ void client_set_state(ObClient *self, Atom action, long data1, long data2) gboolean max_horz = self->max_horz; gboolean max_vert = self->max_vert; gboolean modal = self->modal; - int i; + gint i; if (!(action == prop_atoms.net_wm_state_add || action == prop_atoms.net_wm_state_remove || @@ -2691,7 +2717,7 @@ gboolean client_focus(ObClient *self) #ifdef DEBUG_FOCUS ob_debug("%sively focusing %lx at %d\n", (self->can_focus ? "act" : "pass"), - self->window, (int) event_lasttime); + self->window, (gint) event_lasttime); #endif /* Cause the FocusIn to come back to us. Important for desktop switches, @@ -2755,12 +2781,12 @@ gboolean client_focused(ObClient *self) return self == focus_client; } -static ObClientIcon* client_icon_recursive(ObClient *self, int w, int h) +static ObClientIcon* client_icon_recursive(ObClient *self, gint w, gint h) { guint i; /* si is the smallest image >= req */ /* li is the largest image < req */ - unsigned long size, smallest = 0xffffffff, largest = 0, si = 0, li = 0; + gulong size, smallest = 0xffffffff, largest = 0, si = 0, li = 0; if (!self->nicons) { ObClientIcon *parent = NULL; @@ -2799,7 +2825,7 @@ static ObClientIcon* client_icon_recursive(ObClient *self, int w, int h) return &self->icons[li]; } -const ObClientIcon* client_icon(ObClient *self, int w, int h) +const ObClientIcon* client_icon(ObClient *self, gint w, gint h) { ObClientIcon *ret; static ObClientIcon deficon; @@ -2815,10 +2841,10 @@ const ObClientIcon* client_icon(ObClient *self, int w, int h) /* this be mostly ripped from fvwm */ ObClient *client_find_directional(ObClient *c, ObDirection dir) { - int my_cx, my_cy, his_cx, his_cy; - int offset = 0; - int distance = 0; - int score, best_score; + gint my_cx, my_cy, his_cx, his_cy; + gint offset = 0; + gint distance = 0; + gint score, best_score; ObClient *best_client, *cur; GList *it; @@ -2857,7 +2883,7 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir) if(dir == OB_DIRECTION_NORTHEAST || dir == OB_DIRECTION_SOUTHEAST || dir == OB_DIRECTION_SOUTHWEST || dir == OB_DIRECTION_NORTHWEST) { - int tx; + gint tx; /* Rotate the diagonals 45 degrees counterclockwise. * To do this, multiply the matrix /+h +h\ with the * vector (x y). \-h +h/ @@ -2910,7 +2936,7 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir) return best_client; } -void client_set_layer(ObClient *self, int layer) +void client_set_layer(ObClient *self, gint layer) { if (layer < 0) { self->below = TRUE; @@ -3058,10 +3084,10 @@ void client_update_sm_client_id(ObClient *self) * note to self: the edge is the -frame- edge (the actual one), not the * client edge. */ -int client_directional_edge_search(ObClient *c, ObDirection dir) +gint client_directional_edge_search(ObClient *c, ObDirection dir) { - int dest; - int my_edge_start, my_edge_end, my_offset; + gint dest; + gint my_edge_start, my_edge_end, my_offset; GList *it; Rect *a; @@ -3080,7 +3106,7 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) dest = a->y; for(it = g_list_first(client_list); it; it = it->next) { - int his_edge_start, his_edge_end, his_offset; + gint his_edge_start, his_edge_end, his_offset; ObClient *cur = it->data; if(cur == c) @@ -3121,7 +3147,7 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) dest = a->y + a->height; for(it = g_list_first(client_list); it; it = it->next) { - int his_edge_start, his_edge_end, his_offset; + gint his_edge_start, his_edge_end, his_offset; ObClient *cur = it->data; if(cur == c) @@ -3163,7 +3189,7 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) dest = a->x; for(it = g_list_first(client_list); it; it = it->next) { - int his_edge_start, his_edge_end, his_offset; + gint his_edge_start, his_edge_end, his_offset; ObClient *cur = it->data; if(cur == c) @@ -3205,7 +3231,7 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) dest = a->x + a->width; for(it = g_list_first(client_list); it; it = it->next) { - int his_edge_start, his_edge_end, his_offset; + gint his_edge_start, his_edge_end, his_offset; ObClient *cur = it->data; if(cur == c) @@ -3250,7 +3276,7 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) ObClient* client_under_pointer() { - int x, y; + gint x, y; GList *it; ObClient *ret = NULL;