Browse Source

Use gtk_widget_reparent instead of remove/insert. Prevents problems with external plugins (bug #1532).

(Old svn revision: 20333)
upstream/xfce4-panel-4.10.1
Jasper Huijsmans 17 years ago
parent
commit
e5f4534aa7
  1. 11
      panel/panel-dialogs.c
  2. 26
      panel/panel-item-manager.c
  3. 25
      panel/panel-properties.c
  4. 11
      panel/panel.c

11
panel/panel-dialogs.c

@ -221,7 +221,8 @@ add_selected_item (PanelItemsDialog *pid)
item = panel_add_item (pid->panel, info->name);
}
g_idle_add ((GSourceFunc)item_configure_timeout, item);
if (item)
g_idle_add ((GSourceFunc)item_configure_timeout, item);
return TRUE;
}
@ -1179,8 +1180,16 @@ monitor_pressed (GtkToggleButton *tb, GdkEvent *ev, PanelManagerDialog *pmd)
if (mon == tb)
{
XfceMonitor *xmon = panel_app_get_monitor(i);
gtk_toggle_button_set_active (mon, TRUE);
panel_set_monitor (pmd->panel, i);
if (xmon->screen != gtk_widget_get_screen (pmd->dlg))
{
gtk_widget_hide (pmd->dlg);
gtk_window_set_screen (GTK_WINDOW (pmd->dlg),
xmon->screen);
gtk_widget_show (pmd->dlg);
}
}
else
{

26
panel/panel-item-manager.c

@ -63,6 +63,7 @@ struct _XfcePanelItemClass
/* for loadable modules only */
GModule *gmodule;
XfcePanelPluginFunc construct;
XfcePanelPluginCheck check;
};
static GHashTable *plugin_classes = NULL;
@ -351,6 +352,7 @@ xfce_panel_item_manager_create_item (const char *name, const char *id,
{
gpointer symbol;
XfcePanelPluginFunc (*get_construct) (void);
XfcePanelPluginCheck (*get_check) (void);
if (!(class->gmodule = g_module_open (class->file, 0)))
{
@ -372,11 +374,29 @@ xfce_panel_item_manager_create_item (const char *name, const char *id,
get_construct = symbol;
class->construct = get_construct ();
if (g_module_symbol (class->gmodule,
"xfce_panel_plugin_get_check", &symbol))
{
get_check = symbol;
class->check = get_check ();
}
else
{
class->check = NULL;
}
}
item = xfce_internal_panel_plugin_new (class->plugin_name, id,
class->name, size, position,
class->construct);
if (!class->check || class->check() == TRUE )
{
item = xfce_internal_panel_plugin_new (class->plugin_name,
id,
class->name,
size,
position,
class->construct);
}
}
if (item)

25
panel/panel-properties.c

@ -358,6 +358,7 @@ panel_move_function (XfcePanelWindow *window, Panel *panel, int *x, int *y)
priv->monitor = gdk_screen_get_monitor_at_point (
gtk_widget_get_screen (GTK_WIDGET (window)), *x, *y);
DBG (" + Monitor at (%d, %d) = %d\n", *x, *y, priv->monitor);
xmon = panel_app_get_monitor (priv->monitor);
_calculate_coordinates (priv->screen_position, &(xmon->geometry),
@ -1024,18 +1025,30 @@ panel_set_monitor (Panel *panel, int monitor)
if (monitor != priv->monitor)
{
XfceMonitor *xmon;
XfcePanelWidthType width;
/* TODO: check range */
priv->monitor = monitor;
xmon = panel_app_get_monitor (monitor);
gtk_widget_hide (GTK_WIDGET (panel));
gtk_window_set_screen (GTK_WINDOW (panel), xmon->screen);
gtk_widget_show (GTK_WIDGET (panel));
priv->full_width = !priv->full_width;
panel_set_full_width (panel, !priv->full_width);
if (xmon->screen != gtk_widget_get_screen (GTK_WIDGET (panel)))
{
gtk_widget_hide (GTK_WIDGET (panel));
gtk_window_set_screen (GTK_WINDOW (panel), xmon->screen);
gtk_widget_show (GTK_WIDGET (panel));
}
/* new size constraints */
if ((width = priv->full_width) != XFCE_PANEL_NORMAL_WIDTH)
{
priv->full_width = XFCE_PANEL_NORMAL_WIDTH;
panel_set_full_width (panel, width);
}
else
{
gtk_widget_queue_resize (GTK_WIDGET (panel));
}
}
}

11
panel/panel.c

@ -445,8 +445,9 @@ _panel_drag_data_received (GtkWidget *widget, GdkDragContext *context,
{
PanelPrivate *priv = panel->priv;
g_object_ref (plugin);
gtk_container_remove (GTK_CONTAINER (plugin->parent), plugin);
g_object_freeze_notify (G_OBJECT (widget));
gtk_widget_reparent (GTK_WIDGET (plugin), widget);
xfce_panel_item_set_size (XFCE_PANEL_ITEM (plugin),
priv->size);
@ -454,8 +455,10 @@ _panel_drag_data_received (GtkWidget *widget, GdkDragContext *context,
xfce_panel_item_set_screen_position (
XFCE_PANEL_ITEM (plugin), priv->screen_position);
xfce_itembar_insert (XFCE_ITEMBAR (widget), plugin, index);
g_object_unref (plugin);
xfce_itembar_reorder_child (XFCE_ITEMBAR (widget), plugin,
index);
g_object_thaw_notify (G_OBJECT (widget));
xfce_itembar_set_child_expand (
XFCE_ITEMBAR (priv->itembar), plugin,

Loading…
Cancel
Save