Disable DnD on the EStorageSetView to avoid strange behaviors.

* e-shell-view.c (pop_up_folder_bar): Disable DnD on the
EStorageSetView to avoid strange behaviors.
(reparent_storage_set_view_box_and_destroy_popup): Re-enable DnD
here.
(popdown_transient_folder_bar): And here as well.

* evolution-storage-set-view-factory.c
(evolution_storage_set_view_factory_new_view): Disable DnD on the
EStorageSetView.

* e-shell-folder-selection-dialog.c
(e_shell_folder_selection_dialog_construct): Disable DnD on the
EStorageSetView.

* e-shell-folder-creation-dialog.c (add_storage_set_view): Disable
DnD on the EStorageSetView.

* e-storage-set-view.c: New member `allow_dnd' in
`EStorageSetViewPrivate'.
(init): Init to `allow_dnd' %TRUE.
(tree_start_drag): If `allow_dnd' is false, don't start the drag
and return %FALSE.
(tree_drag_motion): If `allow_dnd' is false, return %FALSE.
(e_storage_set_view_get_allow_dnd): New.
(e_storage_set_view_set_allow_dnd): New.

svn path=/trunk/; revision=12810
This commit is contained in:
Ettore Perazzoli
2001-09-13 21:11:22 +00:00
parent 080576bf0d
commit c788ba0faf
8 changed files with 104 additions and 23 deletions

View File

@ -1,3 +1,31 @@
2001-09-13 Ettore Perazzoli <ettore@ximian.com>
* e-shell-view.c (pop_up_folder_bar): Disable DnD on the
EStorageSetView to avoid strange behaviors.
(reparent_storage_set_view_box_and_destroy_popup): Re-enable DnD
here.
(popdown_transient_folder_bar): And here as well.
* evolution-storage-set-view-factory.c
(evolution_storage_set_view_factory_new_view): Disable DnD on the
EStorageSetView.
* e-shell-folder-selection-dialog.c
(e_shell_folder_selection_dialog_construct): Disable DnD on the
EStorageSetView.
* e-shell-folder-creation-dialog.c (add_storage_set_view): Disable
DnD on the EStorageSetView.
* e-storage-set-view.c: New member `allow_dnd' in
`EStorageSetViewPrivate'.
(init): Init to `allow_dnd' %TRUE.
(tree_start_drag): If `allow_dnd' is false, don't start the drag
and return %FALSE.
(tree_drag_motion): If `allow_dnd' is false, return %FALSE.
(e_storage_set_view_get_allow_dnd): New.
(e_storage_set_view_set_allow_dnd): New.
2001-09-12 Ettore Perazzoli <ettore@ximian.com>
* main.c (main): Add SUB_VERSION to the version string passed to

View File

@ -331,6 +331,8 @@ add_storage_set_view (GtkWidget *dialog,
storage_set = e_shell_get_storage_set (shell);
storage_set_view = e_storage_set_new_view (storage_set, NULL/*XXX*/);
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (storage_set_view), FALSE);
GTK_WIDGET_SET_FLAGS (storage_set_view, GTK_CAN_FOCUS);
if (default_parent_folder != NULL)

View File

@ -373,6 +373,7 @@ e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_s
gtk_object_ref (GTK_OBJECT (priv->storage_set));
priv->storage_set_view = e_storage_set_new_view (priv->storage_set, NULL /* No BonoboUIContainer */);
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
/* Load the expanded state for this StorageSetView */
filename = g_strdup_printf ("%s/config/storage-set-view-expanded:view_0",

View File

@ -307,6 +307,10 @@ reparent_storage_set_view_box_and_destroy_popup (EShellView *shell_view)
gtk_widget_destroy (priv->folder_bar_popup);
priv->folder_bar_popup = NULL;
/* Re-enable DnD on the StorageSetView (it got disabled when displaying
the pop-up). */
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
}
static void
@ -320,6 +324,10 @@ popdown_transient_folder_bar (EShellView *shell_view)
gtk_widget_hide (priv->storage_set_view_box);
e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), FALSE);
/* Re-enable DnD on the StorageSetView (it got disabled when displaying
the pop-up). */
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
}
static int
@ -485,6 +493,9 @@ pop_up_folder_bar (EShellView *shell_view)
gtk_widget_show (priv->storage_set_view_box);
gtk_widget_popup (priv->folder_bar_popup, x, y);
/* Disable DnD or "interesting" things will happen. */
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
}

View File

@ -112,6 +112,11 @@ struct _EShellPrivate {
/* Configuration Database */
Bonobo_ConfigDatabase db;
/* Whether the shell is succesfully initialized. This is needed during
the start-up sequence, to avoid CORBA calls to do make wrong things
to happen while the shell is initializing. */
gboolean is_initialized;
};
@ -842,6 +847,7 @@ init (EShell *shell)
priv->crash_type_names = NULL;
priv->line_status = E_SHELL_LINE_STATUS_ONLINE;
priv->db = CORBA_OBJECT_NIL;
priv->is_initialized = FALSE;
shell->priv = priv;
}
@ -904,18 +910,7 @@ e_shell_construct (EShell *shell,
}
CORBA_exception_free (&ev);
/* Now we can register into OAF. Notice that we shouldn't be
registering into OAF until we are sure we can complete the
process. */
/* FIXME: Multi-display stuff. */
corba_object = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
if (oaf_active_server_register (iid, corba_object) != OAF_REG_SUCCESS) {
CORBA_exception_free (&ev);
return E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER;
}
if (! show_splash) {
splash = NULL;
} else {
@ -984,6 +979,17 @@ e_shell_construct (EShell *shell,
e_shortcuts_add_default_group (priv->shortcuts);
g_free (shortcut_path);
/* Now we can register into OAF. Notice that we shouldn't be
registering into OAF until we are initialized. */
/* FIXME: Multi-display stuff. */
corba_object = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
if (oaf_active_server_register (iid, corba_object) != OAF_REG_SUCCESS) {
CORBA_exception_free (&ev);
return E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER;
}
return E_SHELL_CONSTRUCT_RESULT_OK;
}

View File

@ -82,7 +82,8 @@ struct _EStorageSetViewPrivate {
/* Path of the row selected by the latest "cursor_activated" signal. */
char *selected_row_path;
gboolean show_folders;
unsigned int show_folders : 1;
unsigned int allow_dnd : 1;
/* The `Evolution::ShellComponentDnd::SourceFolder' interface for the
folder we are dragging from, or CORBA_OBJECT_NIL if no dragging is
@ -777,7 +778,6 @@ destroy (GtkObject *object)
}
static gint
tree_start_drag (ETree *tree, int row, ETreePath path, int col, GdkEvent *event)
{
@ -788,6 +788,9 @@ tree_start_drag (ETree *tree, int row, ETreePath path, int col, GdkEvent *event)
storage_set_view = E_STORAGE_SET_VIEW (tree);
if (! storage_set_view->priv->allow_dnd)
return FALSE;
target_list = create_target_list_for_node (storage_set_view, path);
if (target_list == NULL)
return FALSE;
@ -1051,6 +1054,9 @@ tree_drag_motion (ETree *tree,
storage_set_view = E_STORAGE_SET_VIEW (tree);
priv = storage_set_view->priv;
if (! priv->allow_dnd)
return FALSE;
path = e_tree_node_at_row (E_TREE (storage_set_view), row);
component_client = get_component_at_node (storage_set_view, path);
@ -1694,6 +1700,7 @@ init (EStorageSetView *storage_set_view)
priv->type_name_to_pixbuf = g_hash_table_new (g_str_hash, g_str_equal);
priv->selected_row_path = NULL;
priv->show_folders = TRUE;
priv->allow_dnd = TRUE;
priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
@ -2027,5 +2034,25 @@ e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view)
return storage_set_view->priv->show_folders;
}
void
e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
gboolean allow_dnd)
{
g_return_if_fail (storage_set_view != NULL);
g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
storage_set_view->priv->allow_dnd = !! allow_dnd;
}
gboolean
e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view)
{
g_return_val_if_fail (storage_set_view != NULL, FALSE);
g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), FALSE);
return storage_set_view->priv->allow_dnd;
}
E_MAKE_TYPE (e_storage_set_view, "EStorageSetView", EStorageSetView, class_init, init, PARENT_TYPE)

View File

@ -68,21 +68,25 @@ struct _EStorageSetViewClass {
};
GtkType e_storage_set_view_get_type (void);
GtkWidget *e_storage_set_view_new_partial_view (EStorageSet *storage_set,
GList *visible_types);
GtkWidget *e_storage_set_view_new (EStorageSet *storage_set,
BonoboUIContainer *container);
void e_storage_set_view_construct (EStorageSetView *storage_set_view,
EStorageSet *storage_set,
BonoboUIContainer *container);
GtkType e_storage_set_view_get_type (void);
GtkWidget *e_storage_set_view_new (EStorageSet *storage_set,
BonoboUIContainer *container);
void e_storage_set_view_construct (EStorageSetView *storage_set_view,
EStorageSet *storage_set,
BonoboUIContainer *container);
void e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view,
const char *path);
const char *e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view);
void e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
gboolean show);
gboolean show);
gboolean e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view);
void e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
gboolean allow_dnd);
gboolean e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view);
#ifdef __cplusplus
}

View File

@ -47,6 +47,8 @@ evolution_storage_set_view_factory_new_view (EShell *shell)
storage_set_view = e_storage_set_view_new (storage_set, NULL /*XXX*/);
gtk_widget_show (storage_set_view);
e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (storage_set_view), FALSE);
storage_set_view_interface = evolution_storage_set_view_new (E_STORAGE_SET_VIEW (storage_set_view));
if (storage_set_view_interface == NULL) {
gtk_widget_destroy (storage_set_view);