void diagram_select_list(Diagram *dia, GList *list) { g_return_if_fail (dia && list); /* otherwise we would signal objects step by step */ g_signal_handlers_block_by_func (dia, DIA_DIAGRAM_DATA_GET_CLASS (dia)->selection_changed, NULL); while (list != NULL) { DiaObject *obj = (DiaObject *)list->data; diagram_select(dia, obj); list = g_list_next(list); } if (get_active_focus((DiagramData*) dia) == NULL) { textedit_activate_first(ddisplay_active()); } g_signal_handlers_unblock_by_func (dia, DIA_DIAGRAM_DATA_GET_CLASS (dia)->selection_changed, NULL); g_signal_emit_by_name (dia, "selection_changed", g_list_length (dia->data->selected)); }
static void ddisp_destroy(DDisplay *ddisp) { g_signal_handlers_disconnect_by_func (ddisp->diagram, selection_changed, ddisp); g_object_unref (G_OBJECT (ddisp->im_context)); ddisp->im_context = NULL; ddisplay_im_context_preedit_reset(ddisp, get_active_focus((DiagramData *) ddisp->diagram)); if (GTK_WINDOW(ddisp->shell) == gtk_window_get_transient_for(GTK_WINDOW(interface_get_toolbox_shell()))) { /* we have to break the connection otherwise the toolbox will be closed */ gtk_window_set_transient_for(GTK_WINDOW(interface_get_toolbox_shell()), NULL); } /* This calls ddisplay_really_destroy */ if (ddisp->is_standalone_window) gtk_widget_destroy (ddisp->shell); else { gtk_widget_destroy (ddisp->container); ddisplay_really_destroy (ddisp); } }
/* This is the real implementation of the sensitivity update. TODO: move it to the DDisplay as it belongs to it IMHO */ void diagram_update_menu_sensitivity (Diagram *dia) { gint selected_count = g_list_length (dia->data->selected); DDisplay *ddisp = ddisplay_active(); gboolean focus_active = (get_active_focus(dia->data) != NULL); gboolean textedit_active = ddisp ? textedit_mode(ddisp) : FALSE; GtkAction *action; /* Edit menu */ if ((action = menus_get_action ("EditUndo")) != NULL) gtk_action_set_sensitive (action, dia ? undo_available(dia->undo, TRUE) : FALSE); if ((action = menus_get_action ("EditRedo")) != NULL) gtk_action_set_sensitive (action, dia ? undo_available(dia->undo, FALSE) : FALSE); if ((action = menus_get_action ("EditCopy")) != NULL) gtk_action_set_sensitive (action, textedit_active || selected_count > 0); if ((action = menus_get_action ("EditCut")) != NULL) gtk_action_set_sensitive (action, textedit_mode(ddisp) || selected_count > 0); if ((action = menus_get_action ("EditPaste")) != NULL) gtk_action_set_sensitive (action, textedit_active || cnp_exist_stored_objects()); if ((action = menus_get_action ("EditDelete")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("EditDuplicate")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("EditCopytext")) != NULL) gtk_action_set_sensitive (action, focus_active); if ((action = menus_get_action ("EditCuttext")) != NULL) gtk_action_set_sensitive (action, focus_active); if ((action = menus_get_action ("EditPastetext")) != NULL) gtk_action_set_sensitive (action, focus_active); /* Objects menu */ if ((action = menus_get_action ("ObjectsSendtoback")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsBringtofront")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsSendbackwards")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsBringforwards")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsLayerAbove")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsLayerBelow")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsGroup")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsUngroup")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_groups (dia)); if ((action = menus_get_action ("ObjectsParent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_can_parent (dia)); if ((action = menus_get_action ("ObjectsUnparent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_children (dia)); if ((action = menus_get_action ("ObjectsUnparentchildren")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_parents (dia)); if ((action = menus_get_action ("ObjectsProperties")) != NULL) gtk_action_set_sensitive (action, selected_count > 0); /* Objects->Align menu */ if ((action = menus_get_action ("ObjectsAlignLeft")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignCenter")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignRight")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignSpreadouthorizontally")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignAdjacent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignTop")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignMiddle")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignBottom")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignSpreadoutvertically")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignStacked")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignConnected")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); /* Select menu */ if ((action = menus_get_action ("SelectAll")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectNone")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectInvert")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectTransitive")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectConnected")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectSametype")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectReplace")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectUnion")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectIntersection")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectRemove")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectInverse")) != NULL) gtk_action_set_sensitive (action, !textedit_active); /* Tools menu - toolbox actions */ gtk_action_group_set_sensitive (menus_get_tool_actions (), !textedit_active); /* View menu - should not need disabling yet */ }