summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mate-panel/panel-widget.c147
1 files changed, 26 insertions, 121 deletions
diff --git a/mate-panel/panel-widget.c b/mate-panel/panel-widget.c
index dd8f6d11..822b8100 100644
--- a/mate-panel/panel-widget.c
+++ b/mate-panel/panel-widget.c
@@ -649,8 +649,8 @@ panel_widget_determine_applet_edge_relativity (PanelWidget *panel_widget,
int start_pos, end_pos;
applet_list = g_list_find (panel_widget->applet_list, applet_in_question);
- start_pos = applet_in_question->constrained;
- end_pos = applet_in_question->constrained;
+ start_pos = applet_in_question->pos + applet_in_question->cells;
+ end_pos = applet_in_question->pos;
/*
* Start by moving towards the start of the panel, checking
@@ -660,14 +660,14 @@ panel_widget_determine_applet_edge_relativity (PanelWidget *panel_widget,
{
applet = l->data;
- if (applet->constrained + applet->cells < end_pos)
+ if (applet->pos + applet->cells < end_pos)
break;
- if (applet->constrained <= panel_widget->size/2 &&
- applet->constrained + applet->cells > panel_widget->size/2)
+ if (applet->pos <= panel_widget->size/2 &&
+ applet->pos + applet->cells > panel_widget->size/2)
applet_is_centered = TRUE;
- end_pos = applet->constrained;
+ end_pos -= applet->cells;
if (end_pos <= 0)
/*
* If the applet in question is part of a line
@@ -678,6 +678,9 @@ panel_widget_determine_applet_edge_relativity (PanelWidget *panel_widget,
return PANEL_EDGE_START;
}
+ if (applet_is_centered)
+ return PANEL_EDGE_CENTER;
+
/*
* Now move towards the panel's end, looking for applets that
* cross the center of the panel.
@@ -686,11 +689,11 @@ panel_widget_determine_applet_edge_relativity (PanelWidget *panel_widget,
{
applet = l->data;
- if (applet->constrained > start_pos)
+ if (applet->pos > start_pos)
break;
- if (applet->constrained <= panel_widget->size/2 &&
- applet->constrained + applet->cells > panel_widget->size/2)
+ if (applet->pos <= panel_widget->size/2 &&
+ applet->pos + applet->cells > panel_widget->size/2)
applet_is_centered = TRUE;
start_pos += applet->cells;
@@ -706,9 +709,9 @@ panel_widget_determine_applet_edge_relativity (PanelWidget *panel_widget,
}
if (applet_is_centered)
- return PANEL_EDGE_CENTER;
-
- return PANEL_EDGE_START;
+ return PANEL_EDGE_CENTER;
+ else
+ return PANEL_EDGE_START;
}
static int
@@ -1547,7 +1550,7 @@ panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
if (edge_relativity == PANEL_EDGE_CENTER)
{
ad->pos = panel->size/2 + position;
- ad->constrained = ad->pos - ad->min_cells/2;
+ ad->constrained = ad->pos - ad->cells/2;
}
else if (edge_relativity == PANEL_EDGE_END)
{
@@ -1569,7 +1572,7 @@ panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
if (right_stuck)
ad->constrained = ad->pos;
else
- ad->constrained = ad->pos - ad->min_cells;
+ ad->constrained = ad->pos - ad->cells;
}
else
{
@@ -1608,59 +1611,16 @@ panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
if (edge_relativity == PANEL_EDGE_CENTER &&
pad &&
previous_edge_relativity == PANEL_EDGE_CENTER &&
- pad->constrained + pad->min_cells/2 < panel->size/2)
- pad->constrained = ad->constrained - pad->min_cells;
+ pad->constrained + pad->cells/2 < panel->size/2)
+ pad->constrained = ad->constrained - pad->cells;
else
ad->constrained = i;
}
- i = ad->constrained + ad->min_cells;
+ i = ad->constrained + ad->cells;
}
- /*
- * Now step through the list of panel applets backwards --
- * from the end of the panel to the start -- and if an applet
- * doesn't fit on the panel, push it closer to the start
- * (left/top) of the panel so that everything fits.
- *
- * Far more importantly, though, this is where expanding
- * applets are dealt with. For applets which are positioned
- * relative to the start of the panel (and applets which are
- * end-relative but right-stuck for backward compatibility),
- * the applet's positioning reference point is the start of
- * the applet. Therefore, expand the applet towards the end
- * (right/bottom) of the panel.
- *
- * If the applet is end-relative (and is not right-stuck),
- * the applet's position is relative to the end of the applet,
- * so the user expects that if the applet is going to expand,
- * the applet should expand towards the start of the panel
- * (in other words, the end-relative position of the applet
- * should not change when the applet is expanded). Not only
- * does the applet's size change, but so does the applet's
- * actual position on the panel (ad->constrained).
- *
- * If the applet is center-relative, the applet's position is
- * relative to the center of the applet, and thus the center
- * of the applet should not move; the applet should grow
- * equally in both directions so that the applet stays truly
- * centered. Look for empty space on the panel before
- * (to the left/above) and after (to the right/below) the
- * applet, and increase the applet's allocation by double the
- * smaller of the two figures. So if there's 18px of empty
- * space immediately to the left and 14px of empty space to
- * the right, increase the applet's allocation by 2*14px, or
- * 28px. On top of that, move the applet's actual position
- * towards the start of the panel by 14px so that the applet
- * remains totally centered.
- *
- * Once the number of cells has been expanded, use the
- * applet's size hints (if any) to modify the final allocation.
- * Only once the size hints have been consulted (and the cell
- * allocation thus potentially adjusted once again) does the
- * actual ("constrained") position get recalculated, as was
- * described above.
- */
+ /* Now expand from the right */
i = panel->size;
for(list = g_list_last(panel->applet_list);
list!=NULL;
@@ -1671,69 +1631,14 @@ panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
ad->constrained = MAX (i - ad->min_cells, 0);
if (ad->expand_major) {
- const char *id;
- AppletInfo *info;
- PanelObjectEdgeRelativity edge_relativity = PANEL_EDGE_START;
- gboolean right_stuck;
- AppletData *pad;
- int prior_space;
- int following_space;
- int additional_space;
-
- id = mate_panel_applet_get_id_by_widget (ad->applet);
- if (id)
- {
- info = mate_panel_applet_get_by_id (id);
- edge_relativity = g_settings_get_enum (info->settings,
- PANEL_OBJECT_RELATIVE_TO_EDGE_KEY);
- right_stuck = g_settings_get_boolean (info->settings,
- PANEL_OBJECT_PANEL_RIGHT_STICK_KEY);
- }
-
- prior_space = ad->constrained;
- if (list->prev)
- {
- pad = list->prev->data;
- prior_space -= pad->constrained + pad->min_cells;
- }
-
- following_space = i - (ad->constrained + ad->min_cells);
-
- /*
- * Also, do not attempt to re-position the
- * applet if it is currently being dragged or
- * otherwise moved by the user; otherwise,
- * we'll just interfere with the user's
- * attempts to move the applet, and the applet
- * will jump in unexpected directions.
- */
-
- if (ad != panel->currently_dragged_applet &&
- edge_relativity == PANEL_EDGE_END &&
- ! right_stuck)
- ad->cells += prior_space;
- else if (ad != panel->currently_dragged_applet &&
- edge_relativity == PANEL_EDGE_CENTER)
- {
- additional_space = MIN (prior_space, following_space);
- additional_space = MAX (additional_space, 0);
- ad->cells += additional_space * 2;
- }
- else
- ad->cells += following_space;
+ int cells = (i - ad->constrained) - 1;
if (ad->size_hints)
- ad->cells = get_size_from_hints (ad, ad->cells);
- ad->cells = MAX (ad->cells, ad->min_cells);
- ad->cells = MIN (ad->cells, panel->size);
+ cells = get_size_from_hints (ad, cells);
+ cells = MAX (cells, ad->min_cells);
+ cells = MIN (cells, panel->size);
- if (ad != panel->currently_dragged_applet)
- {
- if (edge_relativity == PANEL_EDGE_END && ! right_stuck)
- ad->constrained -= ad->cells - ad->min_cells;
- else if (edge_relativity == PANEL_EDGE_CENTER)
- ad->constrained -= (ad->cells - ad->min_cells) / 2;
- }
+ ad->cells = cells;
}
i = ad->constrained;