static void gdl_dock_object_set_property (GObject *g_object, guint prop_id, const GValue *value, GParamSpec *pspec) { GdlDockObject *object = GDL_DOCK_OBJECT (g_object); switch (prop_id) { case PROP_NAME: gdl_dock_object_set_name (object, g_value_get_string (value)); break; case PROP_LONG_NAME: gdl_dock_object_set_long_name (object, g_value_get_string (value)); break; case PROP_STOCK_ID: gdl_dock_object_set_stock_id (object, g_value_get_string (value)); break; case PROP_PIXBUF_ICON: gdl_dock_object_set_pixbuf (object, g_value_get_pointer (value)); break; case PROP_MASTER: if (g_value_get_object (value)) gdl_dock_object_bind (object, g_value_get_object (value)); else gdl_dock_object_unbind (object); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/** * gdl_dock_object_dock: * @object: A #GdlDockObject * @requestor: The widget to dock * @position: The position for the child * @other_data: (allow-none): Optional data giving additional information * depending on the dock object. * * Dock a dock widget in @object at the defined position. */ void gdl_dock_object_dock (GdlDockObject *object, GdlDockObject *requestor, GdlDockPlacement position, GValue *other_data) { GdlDockObject *parent; g_return_if_fail (object != NULL && requestor != NULL); if (object == requestor) return; if (!object->priv->master) g_warning (_("Dock operation requested in a non-bound object %p. " "The application might crash"), object); if (!gdl_dock_object_is_bound (requestor)) gdl_dock_object_bind (requestor, object->priv->master); if (requestor->priv->master != object->priv->master) { g_warning (_("Cannot dock %p to %p because they belong to different masters"), requestor, object); return; } /* first, see if we can optimize things by reordering */ if (position != GDL_DOCK_NONE) { parent = gdl_dock_object_get_parent_object (object); if (gdl_dock_object_reorder (object, requestor, position, other_data) || (parent && gdl_dock_object_reorder (parent, requestor, position, other_data))) return; } /* freeze the object, since under some conditions it might be destroyed when detaching the requestor */ gdl_dock_object_freeze (object); /* detach the requestor before docking */ g_object_ref (requestor); gdl_dock_object_detach (requestor, FALSE); if (position != GDL_DOCK_NONE) g_signal_emit (object, gdl_dock_object_signals [DOCK], 0, requestor, position, other_data); g_object_unref (requestor); gdl_dock_object_thaw (object); if (gtk_widget_get_visible (GTK_WIDGET (requestor))) { requestor->priv->attached = TRUE; #ifndef GDL_DISABLE_DEPRECATED requestor->deprecated_flags |= GDL_DOCK_ATTACHED; #endif } /* Update visibility of automatic parents */ gdl_dock_object_update_parent_visibility (GDL_DOCK_OBJECT (requestor)); }
void gdl_dock_object_dock (GdlDockObject *object, GdlDockObject *requestor, GdlDockPlacement position, GValue *other_data) { GdlDockObject *parent; g_return_if_fail (object != NULL && requestor != NULL); if (object == requestor) return; if (!object->master) g_warning (_("Dock operation requested in a non-bound object %p. " "The application might crash"), object); PF; if (!gdl_dock_object_is_bound (requestor)) gdl_dock_object_bind (requestor, object->master); if (requestor->master != object->master) { g_warning (_("Cannot dock %p to %p because they belong to different masters"), requestor, object); return; } /* first, see if we can optimize things by reordering */ if (position != GDL_DOCK_NONE) { parent = gdl_dock_object_get_parent_object (object); if (gdl_dock_object_reorder (object, requestor, position, other_data) || (parent && gdl_dock_object_reorder (parent, requestor, position, other_data))) return; } /* freeze the object, since under some conditions it might be destroyed when detaching the requestor */ gdl_dock_object_freeze (object); /* detach the requestor before docking */ g_object_ref (requestor); if (GDL_DOCK_OBJECT_ATTACHED (requestor)) gdl_dock_object_detach (requestor, FALSE); if (position != GDL_DOCK_NONE) g_signal_emit (object, gdl_dock_object_signals [DOCK], 0, requestor, position, other_data); dbg(1, "done"); g_object_unref (requestor); gdl_dock_object_thaw (object); }
static GObject * gdl_dock_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_param) { GObject *g_object; g_object = GDL_CALL_PARENT_WITH_DEFAULT (G_OBJECT_CLASS, constructor, (type, n_construct_properties, construct_param), NULL); if (g_object) { GdlDock *dock = GDL_DOCK (g_object); GdlDockMaster *master; /* create a master for the dock if none was provided in the construction */ master = GDL_DOCK_OBJECT_GET_MASTER (GDL_DOCK_OBJECT (dock)); if (!master) { GDL_DOCK_OBJECT_UNSET_FLAGS (dock, GDL_DOCK_AUTOMATIC); master = g_object_new (GDL_TYPE_DOCK_MASTER, NULL); /* the controller owns the master ref */ gdl_dock_object_bind (GDL_DOCK_OBJECT (dock), G_OBJECT (master)); } if (dock->_priv->floating) { GdlDockObject *controller; /* create floating window for this dock */ dock->_priv->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_object_set_data (G_OBJECT (dock->_priv->window), "dock", dock); /* set position and default size */ gtk_window_set_position (GTK_WINDOW (dock->_priv->window), GTK_WIN_POS_MOUSE); gtk_window_set_default_size (GTK_WINDOW (dock->_priv->window), dock->_priv->width, dock->_priv->height); gtk_window_set_type_hint (GTK_WINDOW (dock->_priv->window), GDK_WINDOW_TYPE_HINT_NORMAL); /* metacity ignores this */ gtk_window_move (GTK_WINDOW (dock->_priv->window), dock->_priv->float_x, dock->_priv->float_y); /* connect to the configure event so we can track down window geometry */ g_signal_connect (dock->_priv->window, "configure_event", (GCallback) gdl_dock_floating_configure_event_cb, dock); /* set the title and connect to the long_name notify queue so we can reset the title when this prop changes */ gdl_dock_set_title (dock); g_signal_connect (dock, "notify::long-name", (GCallback) gdl_dock_notify_cb, NULL); gtk_container_add (GTK_CONTAINER (dock->_priv->window), GTK_WIDGET (dock)); g_signal_connect (dock->_priv->window, "delete_event", G_CALLBACK (gdl_dock_floating_window_delete_event_cb), NULL); } GDL_DOCK_OBJECT_SET_FLAGS (dock, GDL_DOCK_ATTACHED); } return g_object; }