* gdesktop.c (click_proxy_button_press): Use a nice arrow cursor
for rubberbanding.
(click_proxy_filter): Keep a firm jaw when the window manager dies
and thus the proxy window is destroyed.
(setup_desktop_click_proxy_window): Moved the proxy window
creation code to this function.
(click_proxy_property_notify): Handle PropertyNotify events from
the root window for when the proxy window changes. Now the window
manager can restart itself as it pleases and GMC will handle it
correctly.
Wheeeee! Desktop icons can be selected by rubberbanding. You
need Englightenment to do this, as so far it seems to be the only
WM with support for the _WIN_DESKTOP_BUTTON_PROXY property.
* gdesktop.c (click_proxy_filter): New event filter for button
presses and releases on the root window.
(click_proxy_button_press): New function to handle button presses
on the desktop.
(click_proxy_button_release): New function to handle button
releases on the desktop.
(click_proxy_motion): New function to handle rubberbanding motion
on the desktop.
(setup_xdnd_proxy): Flush the server after ungrabbing it.
(find_click_proxy_window): Flush the server after ungrabbing it.
(store_temp_selection): Stores the temporary selection to the
master selection, or viceversa. This is needed for dynamic
updating while the user rubberbands.
(update_drag_selection): New function to update the selection
while the user is rubberbanding on the desktop.
(icon_is_in_area): New function to see if an icon is inside the
rubberbanding area.
* gdesktop-icon.h: Added fields for querying the icon and text
position and size.
* gdesktop-icon.c (desktop_icon_reshape): Set the position and
size fields as computed for layout.
* gdesktop.c (editing_started): Grab on the window for the
icon, not on the canvas, so we can properly detect
clicks elsewhere.
(icon_button_release_after): When the user stops selecting,
regrab the pointer.
* gtkdtree.c (gtk_dtree_do_select_dir): fixed a little bug --
caused a segfault.
* gscreen.c (x_create_panel): More changes. The toolbar is moved
to a gtk_toolbar, and is movable. The entry will be put in it's
own toolbar, too.
(panel_create_cwd): For now, hardcode the usize of the entry
widget. Later on, have it expand (when toolbar supports it)
* 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.
* 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.
* gcmd.c (gnome_close_panel): When a panel is destroyed, chdir to
root directory, as the process will be holding the inode for the
directory that was selected until an operation is performed in
another panel.
* gicon.c (gicon_get_icon_for_file): Invert the way the testing
for icons is done to handle directories properly.
* gdesktop.c (dnd_select_icon_pending): Added this flag that
specifies whether a selection is pending for an icon if the user
was holding the Control key down while clicking. We have to delay
selection in this case so that DnD will work correctly, just like
Windows.
(icon_button_press): New function that handles button presses on
icons; it obsoletes the old desktop_icon_info_event().
(icon_button_release): New function that handles button releases
on desktop icons; it will do what is appropriate if there was a
pending icon selection.
(drag_begin): Handle pending selections as appropriate.
(unselect_all): Added an paremeter that specifies which icon to
exclude from unselection.
(editing_started): Unselect all icons but the one for which
editing has started.
(dnd_icon_sources): Changed the MIME-types for internal drops to
"application/x-mc-desktop-icon".
(click_proxy_window): New variable that stores the proxy window
for clicks on the desktop.
(setup_desktop_clicks): New function that sets up clicks on the
root window.
(find_click_proxy_window): New function to find and set up the
window for proxying clicks from the root window.
* image.metadata.in: Added case for `jpg', as there was only a
case for `jpeg'.
* gicon.c (gnome_file_entry_color): If we do not have permissions
for this directory, indicate this with a special icon.
* gscreen.c (panel_icon_list_select_icon): Middle button opens a
new panel on a directory.
* gdesktop.c: Moved the old DnD cruft to olddnd.c to keep it there
for reference purposes.
* gmetadata.c: Removed the gmeta_get_icon_for_file() function, as
it is obsoleted by gicon_get_icon_for_file().
* gdesktop.c (desktop_icon_info_new): Made it use
gicon_get_icon_for_file().
* gdesktop-icon.c (set_icon): Now we handle things internally
using an imlib image, not a filename.
(desktop_icon_new): Now takes an imlib image for the icon instead
of a filename.
(desktop_icon_set_icon): Likewise.
* screen.c (panel_reload): Set panel->selected to zero here, this
will at least guarantee that we do not try to fetch anything
outside of bounds.
* main.c: The bar2 is gone as well.
* gdesktop.c (desktop_icon_info_new): Do not stat the file, as we
do not need that information anymore.
(setup_icon_dnd_source): Moved the DnD-as-source code to here.
(setup_icon_dnd_dest): New function to set up an icon as a DnD
destination.
* gdesktop.c (desktop_icon_info_place): Doh, do not place icons
past the edge of the *whole* screen :-)
(dnd_press_x dnd_press_y): New variables to store the cursor
hotspot for DnD icons. Moved these over from the
desktop_icon_info structure, as it does not make sense to have
this inside every icon.
(button_press): Use dnd_press_x and dnd_press_y.
(drag_begin): Likewise.
(drop_desktop_icons): Use dnd_press_x and dnd_press_y to fix the offsets.
(drag_data_received): Fix the proxy window offsets for all types
of targets.
(drop_desktop_icons): Snap the coordinates as appropriate.
* gdesktop.c (drop_desktop_icons): New function to perform a drop
from desktop icons to the desktop. It effectively moves the icons
around.
(desktop_icon_info_place): Do not place the icons past the edge of
the screen.