Shawn Starr
2006-Nov-08 12:20 UTC
[compiz] bug in today's git snapshot with maximizing windows
Hi David, When maximizing windows on a different resolution only 70% of the window is maximized. Ie: on my 1280x1024 screen a window maximized is correct (and does not clobber the desktop panel in KDE, kicker) On my 1600x1200 screen, with no kicker panel, the window is maximized about 70% of the screen only Is this known? Thanks, Shawn. ----- Original Message ---- From: David Reveman <davidr@novell.com> To: Mike Dransfield <mike@blueroot.co.uk> Cc: compiz@lists.freedesktop.org Sent: Wednesday, November 8, 2006 2:57:38 PM Subject: Re: [compiz] [PATCH] Edge buttons The "button press on edge" functionality should be working OK in the latest code. Let me know if you have any problems with it. I might include the edge size changes if you provide a patch that only include those changes. -David On Wed, 2006-10-25 at 18:20 +0100, Mike Dransfield wrote:> Here are my patches to add edge + button functionality. > > I still feel that there is a problem with gconf, but I have just made it > so that the edge button functionality works. > > I have included a patch for gconf to display AnyButton if it is set > to 0. There is also a patch to make the edge size configurable > because 1 pixel was too small and the mouse keeps slipping off > when using it for the switcher. > > Hopefully these are acceptable, please let me know if they aren't. > plain text document attachment (edgebutton-compiz.h.diff) > diff --git a/include/compiz.h b/include/compiz.h > index 6161f99..8e32f2d 100644 > --- a/include/compiz.h > +++ b/include/compiz.h > @@ -343,7 +343,8 @@ struct _CompAction { > > Bool bell; > > - unsigned int edgeMask; > + unsigned int edgeMask; > + int edgeButton; > }; > > typedef struct { > @@ -751,6 +752,8 @@ struct _CompDisplay { > > HandleEventProc handleEvent; > > + unsigned int mouseOnEdge; > + > CompPrivate *privates; > }; > > @@ -1125,7 +1128,8 @@ #define COMP_SCREEN_OPTION_OPACITY_STEP > #define COMP_SCREEN_OPTION_UNREDIRECT_FS 6 > #define COMP_SCREEN_OPTION_DEFAULT_ICON 7 > #define COMP_SCREEN_OPTION_SYNC_TO_VBLANK 8 > -#define COMP_SCREEN_OPTION_NUM 9 > +#define COMP_SCREEN_OPTION_EDGE_SIZE 9 > +#define COMP_SCREEN_OPTION_NUM 10 > > #ifndef GLX_EXT_texture_from_pixmap > #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 > plain text document attachment (edgebutton-event.c.diff) > diff --git a/src/event.c b/src/event.c > index 5c4610d..b36468b 100644 > --- a/src/event.c > +++ b/src/event.c > @@ -260,6 +260,7 @@ triggerButtonPressBindings (CompDisplay > unsigned int modMask = REAL_MOD_MASK & ~d->ignoredModMask; > unsigned int bindMods; > > + > while (nOption--) > { > if (isInitiateBinding (option, CompBindingTypeButton, state, &action)) > @@ -272,6 +273,15 @@ triggerButtonPressBindings (CompDisplay > if ((*action->initiate) (d, action, state, > argument, nArgument)) > return TRUE; > + > + } > + else if (option->value.action.edgeMask && > + (option->value.action.edgeMask & d->mouseOnEdge) && > + (event->xbutton.button == option->value.action.edgeButton)) > + { > + if ((*action->initiate) (d, action, state, > + argument, nArgument)) > + return TRUE; > } > } > > @@ -553,6 +563,10 @@ isEdgeEnterAction (CompOption *opti > if (!isEdgeAction (option, state, edge)) > return FALSE; > > + /* block this edge action because there is an edgeButton */ > + if (option->value.action.edgeButton >= 0) > + return FALSE; > + > if (!option->value.action.initiate) > return FALSE; > > @@ -802,6 +816,8 @@ handleActionEvent (CompDisplay *d, > } > } > > + d->mouseOnEdge = 0; > + > edgeWindow = None; > > o[0].value.i = event->xcrossing.window; > @@ -844,6 +860,8 @@ handleActionEvent (CompDisplay *d, > > if (edge) > { > + d->mouseOnEdge = edge; > + > state = CompActionStateInitEdge; > > edgeWindow = event->xcrossing.window; > plain text document attachment (edgebutton-gconf.c.diff) > diff --git a/plugins/gconf.c b/plugins/gconf.c > index ea68ce3..175a4ac 100644 > --- a/plugins/gconf.c > +++ b/plugins/gconf.c > @@ -209,7 +209,7 @@ gconfSetOption (CompDisplay *d, > gconf_value_free (gvalue); > break; > case CompOptionTypeAction: { > - gchar *key1, *key2, *key3, *key4; > + gchar *key1, *key2, *key3, *key4, *key5; > GSList *node, *list = NULL; > GConfValue *gv; > int i; > @@ -218,6 +218,7 @@ gconfSetOption (CompDisplay *d, > key2 = g_strdup_printf ("%s_%s", key, "button"); > key3 = g_strdup_printf ("%s_%s", key, "bell"); > key4 = g_strdup_printf ("%s_%s", key, "edge"); > + key5 = g_strdup_printf ("%s_%s", key, "edge_button"); > > gvalue = gconf_value_new (GCONF_VALUE_STRING); > > @@ -243,6 +244,8 @@ gconfSetOption (CompDisplay *d, > > gconf_value_free (gvalue); > > + > + > gvalue = gconf_value_new (GCONF_VALUE_BOOL); > gconf_value_set_bool (gvalue, o->value.action.bell); > existingValue = gconf_client_get (gd->client, key3, NULL); > @@ -279,10 +282,21 @@ gconfSetOption (CompDisplay *d, > g_slist_free (list); > gconf_value_free (gvalue); > > + > + existingValue = gconf_client_get (gd->client, key5, NULL); > + o->value.action.edgeButton = gconf_value_get_int(existingValue); > + gvalue = gconf_value_new (GCONF_VALUE_INT); > + gconf_value_set_int (gvalue, o->value.action.edgeButton); > + if (!existingValue || gconf_value_compare (existingValue, gvalue)) > + gconf_client_set (gd->client, key5, gvalue, NULL); > + > + gconf_value_free (gvalue); > + > g_free (key1); > g_free (key2); > g_free (key3); > g_free (key4); > + g_free (key5); > } break; > case CompOptionTypeList: { > GConfValueType type; > @@ -455,11 +469,10 @@ gconfGetOptionValue (CompDisplay *d, > } > > optionName = g_strdup (ptr); > - > o = compFindOption (option, nOption, optionName, 0); > if (!o) > { > - static int tail[] = { 4, 5, 7 }; > + static int tail[] = { 4, 5, 7, 12 }; > int i = 0; > > while (i < sizeof (tail) / sizeof (tail[0]) && strlen (ptr) > tail[i]) > @@ -575,6 +588,14 @@ gconfGetOptionValue (CompDisplay *d, > status = TRUE; > } > else if (o->type == CompOptionTypeAction && > + gvalue->type == GCONF_VALUE_INT) > + { > + value = o->value; > + value.action.edgeButton = gconf_value_get_int (gvalue); > + value.action.type |= CompBindingTypeButton; > + status = TRUE; > + } > + else if (o->type == CompOptionTypeAction && > gvalue->type == GCONF_VALUE_LIST) > { > if (gconf_value_get_list_type (gvalue) == GCONF_VALUE_STRING) > @@ -677,7 +698,7 @@ gconfInitOption (CompDisplay *d, > > if (o->type == CompOptionTypeAction) > { > - static gchar *tail[] = { "key", "button", "bell", "edge" }; > + static gchar *tail[] = { "key", "button", "bell", "edge", "edge_button" }; > gchar *key1; > int i; > > plain text document attachment (edgebutton-gconf-dump.c.diff) > diff --git a/plugins/gconf-dump.c b/plugins/gconf-dump.c > index f5c38f4..2601be2 100644 > --- a/plugins/gconf-dump.c > +++ b/plugins/gconf-dump.c > @@ -87,6 +87,7 @@ static gchar *actionSufix[] = { > "button", > "bell", > "edge", > + "edge_button", > NULL > }; > > @@ -404,6 +405,11 @@ gconfDumpToSchema (CompDisplay *d, > gconfPrintf (3, "<type>bool</type>\n"); > value = g_strdup (o->value.action.bell ? "true" : "false"); > } > + else if (strcmp (name + len - 11, "edge_button") == 0) > + { > + gconfPrintf (3, "<type>int</type>\n"); > + value = g_strdup_printf ("%d", o->value.action.edgeButton); > + } > else > { > char *tmp1, *tmp2 = 0; > plain text document attachment (edgebutton-option.c.diff) > diff --git a/src/option.c b/src/option.c > index fe2e179..33c6aad 100644 > --- a/src/option.c > +++ b/src/option.c > @@ -196,7 +196,8 @@ compSetActionOption (CompOption *op > > if (value->action.type == action->type && > value->action.bell == action->bell && > - value->action.edgeMask == action->edgeMask) > + value->action.edgeMask == action->edgeMask && > + value->action.edgeButton == action->edgeButton) > { > Bool equal = TRUE; > > @@ -214,6 +215,7 @@ compSetActionOption (CompOption *op > equal = FALSE; > } > > + > if (equal) > return FALSE; > } > @@ -507,10 +509,21 @@ buttonBindingToString (CompDisplay > char *binding; > char buttonStr[256]; > > + if (button->button < 1) > + button->modifiers = 0; > + > binding = modifiersToString (d, button->modifiers); > > - snprintf (buttonStr, 256, "Button%d", button->button); > - binding = stringAppend (binding, buttonStr); > + if (button->button == 0) > + { > + sprintf (buttonStr, "AnyButton"); > + binding = stringAppend (binding, buttonStr); > + } > + else if (button->button > 0) > + { > + snprintf (buttonStr, 256, "Button%d", button->button); > + binding = stringAppend (binding, buttonStr); > + } > > return binding; > } > @@ -604,6 +617,13 @@ stringToButtonBinding (CompDisplay *d, > return TRUE; > } > } > + else if (strcmp (binding, "AnyButton") == 0) > + { > + button->button = 0; > + button->modifiers = mods; > + > + return TRUE; > + } > > return FALSE; > } > plain text document attachment (edgebutton-rotate.c.diff) > diff --git a/plugins/rotate.c b/plugins/rotate.c > index e70ecaa..55ec325 100644 > --- a/plugins/rotate.c > +++ b/plugins/rotate.c > @@ -1750,6 +1750,7 @@ rotateDisplayInitOptions (RotateDisplay > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > @@ -1769,11 +1770,13 @@ rotateDisplayInitOptions (RotateDisplay > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > o->value.action.state |= CompActionStateInitButton; > o->value.action.type = CompBindingTypeKey; > + o->value.action.button.button = 0; > o->value.action.key.modifiers = ROTATE_RIGHT_MODIFIERS_DEFAULT; > o->value.action.key.keycode > XKeysymToKeycode (display, > @@ -1789,6 +1792,7 @@ rotateDisplayInitOptions (RotateDisplay > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > @@ -1809,6 +1813,7 @@ rotateDisplayInitOptions (RotateDisplay > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > @@ -1837,6 +1842,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = 0; \ > o->value.action.bell = FALSE; \ > o->value.action.edgeMask = 0; \ > + o->value.action.edgeButton = -1; \ > o->value.action.state = CompActionStateInitKey; \ > o->value.action.state |= CompActionStateInitButton; \ > o->value.action.type = CompBindingTypeNone; \ > @@ -1852,6 +1858,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = 0; \ > o->value.action.bell = FALSE; \ > o->value.action.edgeMask = 0; \ > + o->value.action.edgeButton = -1; \ > o->value.action.state = CompActionStateInitKey; \ > o->value.action.state |= CompActionStateInitButton; \ > o->value.action.type = CompBindingTypeNone > @@ -1878,6 +1885,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = 0; > o->value.action.type = CompBindingTypeNone; > > @@ -1890,6 +1898,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = 0; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = 0; > o->value.action.type = CompBindingTypeNone; > > @@ -1903,6 +1912,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = rotateFlipTerminate; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 1 << SCREEN_EDGE_LEFT; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > @@ -1919,6 +1929,7 @@ #define ROTATE_TO_OPTION(n) \ > o->value.action.terminate = rotateFlipTerminate; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 1 << SCREEN_EDGE_RIGHT; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitEdgeDnd; > o->value.action.state |= CompActionStateInitKey; > plain text document attachment (edgebutton-scale.c.diff) > diff --git a/plugins/scale.c b/plugins/scale.c > index 7095c2d..31864be 100644 > --- a/plugins/scale.c > +++ b/plugins/scale.c > @@ -1075,11 +1075,14 @@ scaleInitiate (CompDisplay *d, > damageScreen (s); > } > > - if (state & CompActionStateInitButton) > - action->state |= CompActionStateTermButton; > + if (!(action->edgeMask & d->mouseOnEdge)) > + { > + if (state & CompActionStateInitButton) > + action->state |= CompActionStateTermButton; > > - if (state & CompActionStateInitKey) > - action->state |= CompActionStateTermKey; > + if (state & CompActionStateInitKey) > + action->state |= CompActionStateTermKey; > + } > } > } > > @@ -1372,9 +1375,11 @@ scaleDisplayInitOptions (ScaleDisplay *s > o->value.action.terminate = scaleTerminate; > o->value.action.bell = FALSE; > o->value.action.edgeMask = (1 << SCREEN_EDGE_TOPRIGHT); > - o->value.action.state = CompActionStateInitEdge; > + o->value.action.edgeButton = -1; > o->value.action.type = CompBindingTypeKey; > + o->value.action.state = CompActionStateInitEdge; > o->value.action.state |= CompActionStateInitKey; > + o->value.action.state |= CompActionStateInitButton; > o->value.action.key.modifiers = SCALE_INITIATE_MODIFIERS_DEFAULT; > o->value.action.key.keycode > XKeysymToKeycode (display, > plain text document attachment (edgebutton-screen.c.diff) > diff --git a/src/screen.c b/src/screen.c > index be98004..5f92f53 100644 > --- a/src/screen.c > +++ b/src/screen.c > @@ -67,6 +67,10 @@ #define DEFAULT_ICON_DEFAULT "icon.png" > > #define SYNC_TO_VBLANK_DEFAULT TRUE > > +#define SCREEN_EDGE_SIZE_DEFAULT 1 > +#define SCREEN_EDGE_SIZE_MIN 1 > +#define SCREEN_EDGE_SIZE_MAX 50 > + > #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption)) > > static int > @@ -164,6 +168,59 @@ updateDefaultIcon (CompScreen *screen) > return TRUE; > } > > +static void > +updateScreenEdges (CompScreen *s) > +{ > + > + int edgeSize = 0; > + > + edgeSize = s->opt[COMP_SCREEN_OPTION_EDGE_SIZE].value.i; > + if (edgeSize < 0) > + edgeSize = 1; > + > + struct screenEdgeGeometry { > + int xw, x0; > + int yh, y0; > + int ww, w0; > + int hh, h0; > + } geometry[SCREEN_EDGE_NUM] = { > + { 0, 0, 0, edgeSize, > + 0, edgeSize, 1, (-2*edgeSize) }, /* left */ > + > + { 1, (-1*edgeSize), 0, edgeSize, > + 0, edgeSize, 1, (-2*edgeSize)}, /* right */ > + > + { 0, edgeSize, 0, 0, > + 1, (-2*edgeSize), 0, edgeSize }, /* top */ > + > + { 0, edgeSize, 1, (-1*edgeSize), > + 1, (-2*edgeSize), 0, edgeSize }, /* bottom */ > + > + { 0, 0, 0, 0, > + 0, edgeSize, 0, edgeSize }, /* top-left */ > + > + { 1, (-1*edgeSize), 0, 0, > + 0, edgeSize, 0, edgeSize }, /* top-right */ > + > + { 0, 0, 1, (-1*edgeSize), > + 0, edgeSize, 0, edgeSize }, /* bottom-left */ > + > + { 1, (-1*edgeSize), 1, (-1*edgeSize), > + 0, edgeSize, 0, edgeSize } /* bottom-right */ > + }; > + int i; > + > + for (i = 0; i < SCREEN_EDGE_NUM; i++) > + { > + if (s->screenEdge[i].id) > + XMoveResizeWindow (s->display->display, s->screenEdge[i].id, > + geometry[i].xw * s->width + geometry[i].x0, > + geometry[i].yh * s->height + geometry[i].y0, > + geometry[i].ww * s->width + geometry[i].w0, > + geometry[i].hh * s->height + geometry[i].h0); > + } > +} > + > CompOption * > compGetScreenOptions (CompScreen *screen, > int *count) > @@ -192,6 +249,13 @@ setScreenOption (CompScreen *screen > if (compSetBoolOption (o, value)) > return TRUE; > break; > + case COMP_SCREEN_OPTION_EDGE_SIZE: > + if (compSetIntOption (o, value)) > + { > + updateScreenEdges (screen); > + return TRUE; > + } > + break; > case COMP_SCREEN_OPTION_REFRESH_RATE: > if (screen->opt[COMP_SCREEN_OPTION_DETECT_REFRESH_RATE].value.b) > return FALSE; > @@ -338,6 +402,15 @@ compScreenInitOptions (CompScreen *scree > "blanking period"); > o->type = CompOptionTypeBool; > o->value.b = SYNC_TO_VBLANK_DEFAULT; > + > + o = &screen->opt[COMP_SCREEN_OPTION_EDGE_SIZE]; > + o->name = "edge_size"; > + o->shortDesc = N_("Screen Edge Size"); > + o->longDesc = N_("Screen Edge Size"); > + o->type = CompOptionTypeInt; > + o->value.i = SCREEN_EDGE_SIZE_DEFAULT; > + o->rest.i.min = SCREEN_EDGE_SIZE_MIN; > + o->rest.i.max = SCREEN_EDGE_SIZE_MAX; > } > > static void > @@ -461,36 +534,6 @@ compScreenSnEvent (SnMonitorEvent *event > } > } > > -static void > -updateScreenEdges (CompScreen *s) > -{ > - struct screenEdgeGeometry { > - int xw, x0; > - int yh, y0; > - int ww, w0; > - int hh, h0; > - } geometry[SCREEN_EDGE_NUM] = { > - { 0, 0, 0, 1, 0, 1, 1, -2 }, /* left */ > - { 1, -1, 0, 1, 0, 1, 1, -2 }, /* right */ > - { 0, 1, 0, 0, 1, -2, 0, 1 }, /* top */ > - { 0, 1, 1, -1, 1, -2, 0, 1 }, /* bottom */ > - { 0, 0, 0, 0, 0, 1, 0, 1 }, /* top-left */ > - { 1, -1, 0, 0, 0, 1, 0, 1 }, /* top-right */ > - { 0, 0, 1, -1, 0, 1, 0, 1 }, /* bottom-left */ > - { 1, -1, 1, -1, 0, 1, 0, 1 } /* bottom-right */ > - }; > - int i; > - > - for (i = 0; i < SCREEN_EDGE_NUM; i++) > - { > - if (s->screenEdge[i].id) > - XMoveResizeWindow (s->display->display, s->screenEdge[i].id, > - geometry[i].xw * s->width + geometry[i].x0, > - geometry[i].yh * s->height + geometry[i].y0, > - geometry[i].ww * s->width + geometry[i].w0, > - geometry[i].hh * s->height + geometry[i].h0); > - } > -} > > static void > frustum (GLfloat left, > plain text document attachment (edgebutton-switcher.c.diff) > diff --git a/plugins/switcher.c b/plugins/switcher.c > index 998310f..2d02a9b 100644 > --- a/plugins/switcher.c > +++ b/plugins/switcher.c > @@ -931,11 +931,14 @@ switchNext (CompDisplay *d, > { > switchInitiate (s, FALSE); > > - if (state & CompActionStateInitKey) > - action->state |= CompActionStateTermKey; > + if (!(action->edgeMask & d->mouseOnEdge)) > + { > + if (state & CompActionStateInitKey) > + action->state |= CompActionStateTermKey; > > - if (state & CompActionStateInitButton) > - action->state |= CompActionStateTermButton; > + if (state & CompActionStateInitButton) > + action->state |= CompActionStateTermButton; > + } > } > > switchToWindow (s, TRUE); > @@ -965,11 +968,14 @@ switchPrev (CompDisplay *d, > { > switchInitiate (s, FALSE); > > - if (state & CompActionStateInitKey) > - action->state |= CompActionStateTermKey; > + if (!(action->edgeMask & d->mouseOnEdge)) > + { > + if (state & CompActionStateInitKey) > + action->state |= CompActionStateTermKey; > > - if (state & CompActionStateInitButton) > - action->state |= CompActionStateTermButton; > + if (state & CompActionStateInitButton) > + action->state |= CompActionStateTermButton; > + } > } > > switchToWindow (s, FALSE); > @@ -1871,12 +1877,15 @@ switchDisplayInitOptions (SwitchDisplay > o->value.action.initiate = switchNext; > o->value.action.terminate = switchTerminate; > o->value.action.bell = FALSE; > - o->value.action.edgeMask = 0; > + o->value.action.edgeMask = (1 << SCREEN_EDGE_TOP); > + o->value.action.edgeButton = 5; > o->value.action.state = CompActionStateInitKey; > o->value.action.state |= CompActionStateInitButton; > + o->value.action.state |= CompActionStateInitEdge; > + o->value.action.state |= CompActionStateTermEdge; > o->value.action.type = CompBindingTypeKey; > o->value.action.key.modifiers = SWITCH_NEXT_MODIFIERS_DEFAULT; > - o->value.action.key.keycode > + o->value.action.key.keycode = > XKeysymToKeycode (display, > XStringToKeysym (SWITCH_NEXT_KEY_DEFAULT)); > > @@ -1889,9 +1898,12 @@ switchDisplayInitOptions (SwitchDisplay > o->value.action.initiate = switchPrev; > o->value.action.terminate = switchTerminate; > o->value.action.bell = FALSE; > - o->value.action.edgeMask = 0; > + o->value.action.edgeMask = (1 << SCREEN_EDGE_TOP); > + o->value.action.edgeButton = 4; > o->value.action.state = CompActionStateInitKey; > o->value.action.state |= CompActionStateInitButton; > + o->value.action.state |= CompActionStateInitEdge; > + o->value.action.state |= CompActionStateTermEdge; > o->value.action.type = CompBindingTypeKey; > o->value.action.key.modifiers = SWITCH_PREV_MODIFIERS_DEFAULT; > o->value.action.key.keycode > @@ -1909,6 +1921,7 @@ switchDisplayInitOptions (SwitchDisplay > o->value.action.terminate = switchTerminate; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitKey; > o->value.action.state |= CompActionStateInitButton; > o->value.action.type = CompBindingTypeKey; > @@ -1928,6 +1941,7 @@ switchDisplayInitOptions (SwitchDisplay > o->value.action.terminate = switchTerminate; > o->value.action.bell = FALSE; > o->value.action.edgeMask = 0; > + o->value.action.edgeButton = -1; > o->value.action.state = CompActionStateInitKey; > o->value.action.state |= CompActionStateInitButton; > o->value.action.type = CompBindingTypeKey; > _______________________________________________ > compiz mailing list > compiz@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/compiz_______________________________________________ compiz mailing list compiz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/compiz
Mike Cook
2006-Nov-08 13:37 UTC
[compiz] bug in today's git snapshot with maximizing windows
On Nov 08, 2006 at 1:20 PM, Shawn Starr wrote:> When maximizing windows on a different resolution only 70% of the window > is maximized. > > Ie: on my 1280x1024 screen a window maximized is correct (and does not > clobber the desktop panel in KDE, kicker) > > On my 1600x1200 screen, with no kicker panel, the window is maximized > about 70% of the screen onlyI think that's the same issue I'm experiencing, though I'm pretty sure it's not new to today's build but since the maximize changes from about a week ago. In my case the problem is the panel and the fact that there's a single workarea for the whole screen (see my "Set workarea per output" comment from yesterday). The panels are basically subtracted from the workarea so that windows won't overlap, but it doesn't properly handle where those panels are only on one of multiple monitors. Per David's response to my comment, I'm willing to try hacking up a patch for the workarea-per-output idea. Then updates in window.c and maybe the place plugin could use that and we'd get more proper placement and window maximizing per output. However, I've noticed some discussions on the _NET_WORKAREA and multiple heads and it sounds like there needs to be changes eventually to the spec to better handle these multiple output cases. But in the meantime, I think we can make it work mostly right. ;) ...MC
David Reveman
2006-Nov-13 14:11 UTC
[compiz] bug in today's git snapshot with maximizing windows
On Sun, 2006-11-12 at 21:31 -0500, Mike Cook wrote:> On Nov 12, 2006 at 10:33, David Reveman wrote: > > Thanks, I applied you're patch. I found one issue with the current code > > though.. We shouldn't use the window position and size to determine if a > > window should affect the workspace of a output or not. The > > _NET_WM_STRUT_PARIAL hint contains everything we need to determine if it > > should affect an output or not. > > Ah, good, I wasn't sure the best place to read that... > > > I removed the MIN_SANE_AREA stuff as I would like it to be possible to > > have a zero workarea on some outputs. > > > > I changed these things and pushed it out. You should have a look at it > > and let me know what you think. > > > > Thanks, > > > > -David > > That works great, David. Just one little typo (breaking bottom edge panels): > > --- src/screen.c > +++ src/screen.c > @@ -2757,7 +2757,7 @@ computeWorkareaForBox (CompScreen *s, > > if (x1 < pBox->x2 && x2 > pBox->x1) > { > - if (y1 > strutY2) > + if (y1 < strutY2) > strutY2 = y1; > } > }Thanks, -David