1998-12-10 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gcmd.c: #include "../vfs/vfs.h" * gdesktop.c (setup_icon_dnd_actions): Moved the code that calls gtk_drag_source_set() for an icon here. (editing_started): Temporarily disable drags while the icon's text is being edited. (editing_stopped): Re-enable DnD from the icon once editing has stopped.
Этот коммит содержится в:
родитель
920858cfaf
Коммит
34a33b2a7a
@ -66,7 +66,6 @@ Thu Dec 10 21:38:55 1998 Owen Taylor <otaylor@redhat.com>
|
|||||||
* gscreen.c (panel_icon_list_select_icon): Middle button opens a
|
* gscreen.c (panel_icon_list_select_icon): Middle button opens a
|
||||||
new panel on a directory.
|
new panel on a directory.
|
||||||
|
|
||||||
>>>>>>> 1.184
|
|
||||||
1998-12-08 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
1998-12-08 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||||
|
|
||||||
* gdesktop.c: Moved the old DnD cruft to olddnd.c to keep it there
|
* gdesktop.c: Moved the old DnD cruft to olddnd.c to keep it there
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "gcmd.h"
|
#include "gcmd.h"
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
|
#include "../vfs/vfs.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
gnome_listing_cmd (GtkWidget *widget, WPanel *panel)
|
gnome_listing_cmd (GtkWidget *widget, WPanel *panel)
|
||||||
|
@ -581,6 +581,10 @@ editing_started (GnomeIconTextItem *iti, gpointer data)
|
|||||||
|
|
||||||
dii = data;
|
dii = data;
|
||||||
|
|
||||||
|
/* Disable drags from this icon until editing is finished */
|
||||||
|
|
||||||
|
gtk_drag_source_unset (DESKTOP_ICON (dii->dicon)->canvas);
|
||||||
|
|
||||||
/* Unselect all icons but this one */
|
/* Unselect all icons but this one */
|
||||||
unselect_all (dii);
|
unselect_all (dii);
|
||||||
|
|
||||||
@ -600,6 +604,17 @@ editing_started (GnomeIconTextItem *iti, gpointer data)
|
|||||||
gdk_keyboard_grab (GTK_LAYOUT (DESKTOP_ICON (dii->dicon)->canvas)->bin_window, FALSE, GDK_CURRENT_TIME);
|
gdk_keyboard_grab (GTK_LAYOUT (DESKTOP_ICON (dii->dicon)->canvas)->bin_window, FALSE, GDK_CURRENT_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sets up the specified icon as a drag source, but does not connect the signals */
|
||||||
|
static void
|
||||||
|
setup_icon_dnd_actions (struct desktop_icon_info *dii)
|
||||||
|
{
|
||||||
|
gtk_drag_source_set (DESKTOP_ICON (dii->dicon)->canvas,
|
||||||
|
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
|
||||||
|
dnd_icon_sources,
|
||||||
|
dnd_icon_nsources,
|
||||||
|
GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
|
||||||
|
}
|
||||||
|
|
||||||
/* Callback used when the user finishes editing the icon text item in a desktop icon. It removes
|
/* Callback used when the user finishes editing the icon text item in a desktop icon. It removes
|
||||||
* the mouse and keyboard grabs.
|
* the mouse and keyboard grabs.
|
||||||
*/
|
*/
|
||||||
@ -612,6 +627,10 @@ editing_stopped (GnomeIconTextItem *iti, gpointer data)
|
|||||||
|
|
||||||
gdk_pointer_ungrab (GDK_CURRENT_TIME);
|
gdk_pointer_ungrab (GDK_CURRENT_TIME);
|
||||||
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
|
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
|
||||||
|
|
||||||
|
/* Re-enable drags from this icon */
|
||||||
|
|
||||||
|
setup_icon_dnd_actions (dii);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Used to open a desktop icon when the user double-clicks on it */
|
/* Used to open a desktop icon when the user double-clicks on it */
|
||||||
@ -656,6 +675,11 @@ icon_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data)
|
|||||||
|
|
||||||
dii = data;
|
dii = data;
|
||||||
|
|
||||||
|
/* If the text is being edited, do not handle clicks by ourselves */
|
||||||
|
|
||||||
|
if (GNOME_ICON_TEXT_ITEM (DESKTOP_ICON (dii->dicon)->text)->editing)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* Save the mouse position for DnD */
|
/* Save the mouse position for DnD */
|
||||||
|
|
||||||
dnd_press_x = event->x;
|
dnd_press_x = event->x;
|
||||||
@ -865,11 +889,7 @@ drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *sel
|
|||||||
static void
|
static void
|
||||||
setup_icon_dnd_source (struct desktop_icon_info *dii)
|
setup_icon_dnd_source (struct desktop_icon_info *dii)
|
||||||
{
|
{
|
||||||
gtk_drag_source_set (DESKTOP_ICON (dii->dicon)->canvas,
|
setup_icon_dnd_actions (dii);
|
||||||
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
|
|
||||||
dnd_icon_sources,
|
|
||||||
dnd_icon_nsources,
|
|
||||||
GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
|
|
||||||
|
|
||||||
gtk_signal_connect (GTK_OBJECT (DESKTOP_ICON (dii->dicon)->canvas), "drag_begin",
|
gtk_signal_connect (GTK_OBJECT (DESKTOP_ICON (dii->dicon)->canvas), "drag_begin",
|
||||||
(GtkSignalFunc) drag_begin,
|
(GtkSignalFunc) drag_begin,
|
||||||
@ -927,6 +947,8 @@ setup_icon_dnd_dest (struct desktop_icon_info *dii)
|
|||||||
if (!fe)
|
if (!fe)
|
||||||
return; /* eek */
|
return; /* eek */
|
||||||
|
|
||||||
|
/* See what actions are appropriate for this icon */
|
||||||
|
|
||||||
if (fe->f.link_to_dir)
|
if (fe->f.link_to_dir)
|
||||||
actions = GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK;
|
actions = GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK;
|
||||||
else if (is_exe (fe->buf.st_mode) && if_link_is_exe (fe))
|
else if (is_exe (fe->buf.st_mode) && if_link_is_exe (fe))
|
||||||
@ -939,6 +961,8 @@ setup_icon_dnd_dest (struct desktop_icon_info *dii)
|
|||||||
if (!actions)
|
if (!actions)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Connect the drop signals */
|
||||||
|
|
||||||
gtk_drag_dest_set (DESKTOP_ICON (dii->dicon)->canvas,
|
gtk_drag_dest_set (DESKTOP_ICON (dii->dicon)->canvas,
|
||||||
GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
|
GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
|
||||||
dnd_icon_targets,
|
dnd_icon_targets,
|
||||||
@ -1383,6 +1407,10 @@ setup_desktop_clicks (void)
|
|||||||
gtk_widget_show (click_proxy_invisible);
|
gtk_widget_show (click_proxy_invisible);
|
||||||
gdk_window_set_user_data (click_proxy_gdk_window, click_proxy_invisible); /* make it send events to us */
|
gdk_window_set_user_data (click_proxy_gdk_window, click_proxy_invisible); /* make it send events to us */
|
||||||
|
|
||||||
|
/* The proxy window for clicks sends us events as SubstructureNotify things */
|
||||||
|
|
||||||
|
XSelectInput (GDK_DISPLAY (), GDK_WINDOW_XWINDOW (click_proxy_gdk_window), SubstructureNotifyMask);
|
||||||
|
|
||||||
gtk_signal_connect (GTK_OBJECT (click_proxy_invisible), "event",
|
gtk_signal_connect (GTK_OBJECT (click_proxy_invisible), "event",
|
||||||
(GtkSignalFunc) click_proxy_event,
|
(GtkSignalFunc) click_proxy_event,
|
||||||
NULL);
|
NULL);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user