Browse Source

Try to improve multihead behavior by setting DISPLAY variable at several strategic places in the code.

(Old svn revision: 20342)
upstream/xfce4-panel-4.10.1
Jasper Huijsmans 17 years ago
parent
commit
6e0d43ed2e
  1. 16
      panel/panel-app.c
  2. 1
      panel/panel-app.h
  3. 7
      panel/panel-config.c
  4. 9
      panel/panel.c

16
panel/panel-app.c

@ -113,6 +113,14 @@ cleanup_panels (void)
l = g_list_delete_link (l, l);
}
for (i = 0; i < panel_app.monitor_list->len; ++i)
{
XfceMonitor *xmon = g_ptr_array_index (panel_app.monitor_list, i);
g_free (xmon->dpyname);
g_free (xmon);
}
g_ptr_array_free (panel_app.monitor_list, TRUE);
for (i = 0; i < panel_app.panel_list->len; ++i)
{
Panel *panel = g_ptr_array_index (panel_app.panel_list, i);
@ -312,6 +320,8 @@ create_monitor_list (void)
gdk_screen_get_monitor_geometry (screen, j, &(monitor->geometry));
monitor->dpyname = gdk_screen_make_display_name (screen);
g_ptr_array_add (panel_app.monitor_list, monitor);
if (j > 0)
@ -333,6 +343,8 @@ create_monitor_list (void)
gdk_screen_get_monitor_geometry (screen, j, &(monitor->geometry));
monitor->dpyname = gdk_screen_make_display_name (screen);
g_ptr_array_add (panel_app.monitor_list, monitor);
#endif
}
@ -573,6 +585,10 @@ panel_app_run (int argc, char **argv)
g_ptr_array_foreach (panel_app.panel_list, (GFunc)panel_app_init_panel,
NULL);
/* reset environment */
xfce_setenv ("DISPLAY", gdk_display_get_name (gdk_display_get_default ()),
TRUE);
/* Run Forrest, Run! */
panel_app.check_id =
g_timeout_add (250, (GSourceFunc) check_signal_state, NULL);

1
panel/panel-app.h

@ -87,6 +87,7 @@ struct _XfceMonitor
GdkScreen *screen;
int num;
GdkRectangle geometry;
char *dpyname;
guint has_neighbor_left:1;
guint has_neighbor_right:1;
guint has_neighbor_above:1;

7
panel/panel-config.c

@ -428,6 +428,8 @@ end_element_handler (GMarkupParseContext * context,
case PROPERTIES:
if (strcmp ("properties", element_name) == 0)
{
XfceMonitor *xmon;
parser->state = PANEL;
if (parser->properties_set)
{
@ -440,6 +442,11 @@ end_element_handler (GMarkupParseContext * context,
parser->monitor = DefaultScreen (GDK_DISPLAY());
}
/* environment */
xmon = panel_app_get_monitor (parser->monitor);
xfce_setenv ("DISPLAY", xmon->dpyname, TRUE);
g_object_set (G_OBJECT (parser->current_panel),
"size", parser->size,
"monitor", parser->monitor,

9
panel/panel.c

@ -810,9 +810,14 @@ panel_create_item (Panel *panel, const char *name, const char *id)
{
PanelPrivate *priv;
GtkWidget *item = NULL;
XfceMonitor *xmon;
priv = panel->priv;
/* environment */
xmon = panel_app_get_monitor (priv->monitor);
xfce_setenv ("DISPLAY", xmon->dpyname, TRUE);
if ((item = xfce_panel_item_manager_create_item (name, id,
priv->size, priv->screen_position)) != NULL)
{
@ -835,6 +840,10 @@ panel_create_item (Panel *panel, const char *name, const char *id)
G_CALLBACK (_item_start_move), panel);
}
/* reset environment */
xfce_setenv ("DISPLAY", gdk_display_get_name (gdk_display_get_default ()),
TRUE);
return item;
}

Loading…
Cancel
Save