Lines Matching defs:master

3  * gdl-dock-master.c - Object which manages a dock ring
30 #include "gdl-dock-master.h"
56 GdlDockMaster *master);
72 static void gdl_dock_master_xor_rect (GdlDockMaster *master);
74 static void gdl_dock_master_layout_changed (GdlDockMaster *master);
76 static void gdl_dock_master_set_switcher_style (GdlDockMaster *master,
117 #define COMPUTE_LOCKED(master) \
118 (g_hash_table_size ((master)->_priv->unlocked_items) == 0 ? 1 : \
119 (g_hash_table_size ((master)->_priv->locked_items) == 0 ? 0 : -1))
149 _("If is set to 1, all the dock items bound to the master "
178 gdl_dock_master_init (GdlDockMaster *master)
180 master->dock_objects = g_hash_table_new_full (g_str_hash, g_str_equal,
182 master->toplevel_docks = NULL;
183 master->controller = NULL;
184 master->dock_number = 1;
186 master->_priv = g_new0 (GdlDockMasterPrivate, 1);
187 master->_priv->number = 1;
188 master->_priv->switcher_style = GDL_SWITCHER_STYLE_BOTH;
189 master->_priv->locked_items = g_hash_table_new (g_direct_hash, g_direct_equal);
190 master->_priv->unlocked_items = g_hash_table_new (g_direct_hash, g_direct_equal);
195 GdlDockMaster *master)
197 g_return_if_fail (master != NULL && object != NULL);
202 found_link = g_list_find (master->toplevel_docks, object);
204 master->toplevel_docks = g_list_delete_link (master->toplevel_docks,
206 if (object == master->controller) {
213 last = g_list_last (master->toplevel_docks);
224 master->controller = new_controller;
226 master->controller = NULL;
227 /* no controller, no master */
228 g_object_unref (master);
234 0, 0, NULL, NULL, master);
239 found_object = g_hash_table_lookup (master->dock_objects, object->name);
241 g_hash_table_remove (master->dock_objects, object->name);
258 GdlDockMaster *master;
262 master = GDL_DOCK_MASTER (g_object);
264 if (master->toplevel_docks) {
265 g_list_foreach (master->toplevel_docks,
267 g_list_free (master->toplevel_docks);
268 master->toplevel_docks = NULL;
271 if (master->dock_objects) {
273 g_hash_table_foreach (master->dock_objects,
280 g_hash_table_destroy (master->dock_objects);
281 master->dock_objects = NULL;
284 if (master->_priv) {
285 if (master->_priv->idle_layout_changed_id)
286 g_source_remove (master->_priv->idle_layout_changed_id);
288 if (master->_priv->root_xor_gc) {
289 g_object_unref (master->_priv->root_xor_gc);
290 master->_priv->root_xor_gc = NULL;
292 if (master->_priv->drag_request) {
293 if (G_IS_VALUE (&master->_priv->drag_request->extra))
294 g_value_unset (&master->_priv->drag_request->extra);
295 g_free (master->_priv->drag_request);
296 master->_priv->drag_request = NULL;
298 g_free (master->_priv->default_title);
299 master->_priv->default_title = NULL;
301 g_hash_table_destroy (master->_priv->locked_items);
302 master->_priv->locked_items = NULL;
303 g_hash_table_destroy (master->_priv->unlocked_items);
304 master->_priv->unlocked_items = NULL;
306 g_free (master->_priv);
307 master->_priv = NULL;
328 gdl_dock_master_lock_unlock (GdlDockMaster *master,
333 for (l = master->toplevel_docks; l; l = l->next) {
340 gdl_dock_master_foreach (master,
351 GdlDockMaster *master = GDL_DOCK_MASTER (object);
355 g_free (master->_priv->default_title);
356 master->_priv->default_title = g_value_dup_string (value);
360 gdl_dock_master_lock_unlock (master, (g_value_get_int (value) > 0));
363 gdl_dock_master_set_switcher_style (master, g_value_get_enum (value));
377 GdlDockMaster *master = GDL_DOCK_MASTER (object);
381 g_value_set_string (value, master->_priv->default_title);
384 g_value_set_int (value, COMPUTE_LOCKED (master));
387 g_value_set_enum (value, master->_priv->switcher_style);
399 GdlDockMaster *master;
405 master = GDL_DOCK_MASTER (data);
407 if (!master->_priv->drag_request)
408 master->_priv->drag_request = g_new0 (GdlDockRequest, 1);
410 request = master->_priv->drag_request;
419 master->_priv->rect_drawn = FALSE;
420 master->_priv->rect_owner = NULL;
428 GdlDockMaster *master;
434 master = GDL_DOCK_MASTER (data);
435 request = master->_priv->drag_request;
440 if (master->_priv->rect_drawn)
441 gdl_dock_master_xor_rect (master);
453 g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0);
462 GdlDockMaster *master;
473 master = GDL_DOCK_MASTER (data);
474 request = master->_priv->drag_request;
489 GDL_DOCK_OBJECT_GET_MASTER (widget) != master))
523 for (l = master->toplevel_docks; l; l = l->next) {
572 && dock != GDL_DOCK(master->controller))
579 dock == master->_priv->rect_owner)) {
582 if (master->_priv->rect_drawn)
583 gdl_dock_master_xor_rect (master);
588 master->_priv->rect_owner = dock;
591 if (~master->_priv->rect_drawn)
592 gdl_dock_master_xor_rect (master);
609 gdl_dock_master_xor_rect (GdlDockMaster *master)
615 if (!master->_priv || !master->_priv->drag_request)
618 master->_priv->rect_drawn = ~master->_priv->rect_drawn;
620 if (master->_priv->rect_owner) {
621 gdl_dock_xor_rect (master->_priv->rect_owner,
622 &master->_priv->drag_request->rect);
626 rect = &master->_priv->drag_request->rect;
629 if (!master->_priv->root_xor_gc) {
634 master->_priv->root_xor_gc = gdk_gc_new_with_values (
650 gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1,
657 gdk_gc_set_dashes (master->_priv->root_xor_gc, 1, dash_list, 2);
659 gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0,
663 gdk_gc_set_dashes (master->_priv->root_xor_gc, 0, dash_list, 2);
665 gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0,
671 gdl_dock_master_layout_changed (GdlDockMaster *master)
673 g_return_if_fail (GDL_IS_DOCK_MASTER (master));
677 if (master->controller)
678 g_signal_emit_by_name (master->controller, "layout-changed");
681 if (master->_priv->idle_layout_changed_id) {
682 g_source_remove (master->_priv->idle_layout_changed_id);
683 master->_priv->idle_layout_changed_id = 0;
690 GdlDockMaster *master = user_data;
692 g_return_val_if_fail (master && GDL_IS_DOCK_MASTER (master), FALSE);
694 master->_priv->idle_layout_changed_id = 0;
695 g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0);
707 GdlDockMaster *master = user_data;
710 g_return_if_fail (master && GDL_IS_DOCK_MASTER (master));
717 if (!master->_priv->idle_layout_changed_id)
718 master->_priv->idle_layout_changed_id =
719 g_idle_add (idle_emit_layout_changed, master);
728 GdlDockMaster *master = user_data;
731 g_return_if_fail (master && GDL_IS_DOCK_MASTER (master));
735 if (!master->_priv->idle_layout_changed_id)
736 master->_priv->idle_layout_changed_id =
737 g_idle_add (idle_emit_layout_changed, master);
746 GdlDockMaster *master = user_data;
747 gint locked = COMPUTE_LOCKED (master);
753 g_hash_table_remove (master->_priv->unlocked_items, object);
754 g_hash_table_insert (master->_priv->locked_items, object, NULL);
756 g_hash_table_remove (master->_priv->locked_items, object);
757 g_hash_table_insert (master->_priv->unlocked_items, object, NULL);
760 if (COMPUTE_LOCKED (master) != locked)
761 g_object_notify (G_OBJECT (master), "locked");
767 gdl_dock_master_add (GdlDockMaster *master,
770 g_return_if_fail (master != NULL && object != NULL);
779 object->name = g_strdup_printf ("__dock_%u", master->_priv->number++);
782 if ((found_object = g_hash_table_lookup (master->dock_objects, object->name))) {
783 g_warning (_("master %p: unable to add object %p[%s] to the hash. "
785 master, object, object->name, found_object);
789 g_hash_table_insert (master->dock_objects, g_strdup (object->name), object);
797 if (!master->toplevel_docks)
799 master->controller = object;
804 master->toplevel_docks = g_list_prepend (master->toplevel_docks, object);
806 master->toplevel_docks = g_list_append (master->toplevel_docks, object);
811 G_CALLBACK (item_dock_cb), master);
817 G_CALLBACK (gdl_dock_master_drag_begin), master);
819 G_CALLBACK (gdl_dock_master_drag_motion), master);
821 G_CALLBACK (gdl_dock_master_drag_end), master);
823 G_CALLBACK (item_dock_cb), master);
825 G_CALLBACK (item_detach_cb), master);
831 G_CALLBACK (item_notify_cb), master);
832 item_notify_cb (object, NULL, master);
840 master->_priv->switcher_style, NULL);
846 if (!master->_priv->idle_layout_changed_id)
847 master->_priv->idle_layout_changed_id =
848 g_idle_add (idle_emit_layout_changed, master);
854 gdl_dock_master_remove (GdlDockMaster *master,
857 g_return_if_fail (master != NULL && object != NULL);
862 gint locked = COMPUTE_LOCKED (master);
863 if (g_hash_table_remove (master->_priv->locked_items, object) ||
864 g_hash_table_remove (master->_priv->unlocked_items, object)) {
865 if (COMPUTE_LOCKED (master) != locked)
866 g_object_notify (G_OBJECT (master), "locked");
870 /* ref the master, since removing the controller could cause master disposal */
871 g_object_ref (master);
874 _gdl_dock_master_remove (object, master);
879 if (!master->_priv->idle_layout_changed_id)
880 master->_priv->idle_layout_changed_id =
881 g_idle_add (idle_emit_layout_changed, master);
885 g_object_unref (master);
889 gdl_dock_master_foreach (GdlDockMaster *master,
898 g_return_if_fail (master != NULL && function != NULL);
902 g_hash_table_foreach (master->dock_objects, _gdl_dock_master_foreach, &data);
906 gdl_dock_master_foreach_toplevel (GdlDockMaster *master,
913 g_return_if_fail (master != NULL && function != NULL);
915 for (l = master->toplevel_docks; l; ) {
918 if (object != master->controller || include_controller)
924 gdl_dock_master_get_object (GdlDockMaster *master,
929 g_return_val_if_fail (master != NULL, NULL);
934 found = g_hash_table_lookup (master->dock_objects, nick_name);
940 gdl_dock_master_get_controller (GdlDockMaster *master)
942 g_return_val_if_fail (master != NULL, NULL);
944 return master->controller;
948 gdl_dock_master_set_controller (GdlDockMaster *master,
951 g_return_if_fail (master != NULL);
959 if (!g_list_find (master->toplevel_docks, new_controller))
960 gdl_dock_master_add (master, new_controller);
961 master->controller = new_controller;
964 master->controller = NULL;
965 /* no controller, no master */
966 g_object_unref (master);
994 gdl_dock_master_set_switcher_style (GdlDockMaster *master,
998 g_return_if_fail (GDL_IS_DOCK_MASTER (master));
1000 master->_priv->switcher_style = switcher_style;
1001 for (l = master->toplevel_docks; l; l = l->next) {
1009 gdl_dock_master_foreach (master, (GFunc) set_switcher_style_foreach,