are almost complete (i.e. to handle all nitty gritty cases), but they
seem to be working OK right now. SM should be much more stable now.
Please tell me if you find any weird behavior - Federico
1999-03-30 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gdesktop-icon.c (desktop_icon_realize): Remove the
WM_CLIENT_LEADER property from icon windows so that window
managers will not store SM information for them.
* gnome-open-dialog.c: Added missing #includes.
* gdesktop-init.c (desktop_init_at): Removed an unused variable.
* gdesktop.h: Added some missing prototypes.
* gmain.h: Added some missing prototypes.
* Makefile.in: Added gsession.[ch] to the list of sources.
* gmain.c (create_panels): Consider whether we have a CORBA server
and session management.
* gdesktop.c: #include "gdesktop-init.h"
* gdesktop.c: Added a missing cast to GNOME_DIALOG.
* gmain.c (create_panels): Removed the run_desktop global
variable.
* glayout.c (create_container): Set the wmclass of the panel to
include its unique ID.
* gsession.[ch]: New file with the functions that deal with
session management.
* glayout.c (gnome_exit): Use session_set_restart().
* gcorba.c (corba_init): Now returns an int with an error value.
(corba_init_server): Initialize the server properly.
Fixed all the object implementation code.
(corba_create_window): New function used to create a window with
the CORBA server.
* gmain.c (gnome_check_super_user): Now the check for running as
root is done here. There should be no GUI code in src/.
1999-03-30 Federico Mena Quintero <federico@nuclecu.unam.mx>
* dlg.c (dlg_run_done): Do not call the callback of a NULL current
widget.
* setup.h: Added missing prototype for setup_init().
* filegui.c (check_progress_buttons): Added a missing return
value.
* dlg.c (remove_widget): Added a missing return value.
* main.c: Removed the global directory_list variable.
Removed the main_corba_register_server() function.
* main.h: Removed the global run_desktop variable.
* panel.h: Now the panel structure has a unique numerical ID used
for session management.
* screen.c (panel_new): Maintain a unique ID for each panel.
* main.c (maybe_display_linksdir): Handle display of the desktop
init dir here.
(main): Call gnome_check_super_user().
(init_corba_with_args): Call corba_init_server().
* main.c (init_corba_with_args): Do CORBA initialization here. Also
removed the global force_activation option.
1999-03-30 Federico Mena Quintero <federico@nuclecu.unam.mx>
* vfs.c (vfs_add_current_stamps): Only do stamping of the panels
if they exist.
* mcserv.c: #include <sys/wait.h>
(get_client): Put `#ifdef __EMX__' around an otherwise-unused
variable.
* utilvfs.c (vfs_split_url): Fix NULL <-> 0 confusion when
comparing characters.
* ftpfs.c (retrieve_dir): Removed unused variable dot_dot_found.
* extfs.c (extfs_init): Assign `key' to c, not `&key'.
* gcmd.c (dentry_apply_callback): new function.
(gnome_new_launcher): We can now create new
1999-03-19 Jonathan Blandford <jrb@redhat.com>
* file.c (panel_operate): Ugly hack for GNOME. We only treat the
copy as if it were many files, and skip the only_one branch.
* gpopup2.c (perform_mount_unmount): Set the icon's cursor while it is
being operated on.
(handle_mount): Use perform_mount_unmount().
(handle_unmount): Likewise.
(handle_eject): Set the icon's cursor while it is being ejected.
* gdesktop.c (desktop_icon_set_busy): New function to set a watch
or normal cursor for a desktop icon.
This is a semi-big slew of changes to integrate the DESKTOP_BRANCH
into the main trunk. Now the gdesktop code creates a temprary
WPanel structure and passes it on to the core file management
functions. Also, the menu code is improved (we now use gpopup2;
gpopup should go away shortly and gpopup2 should replace it).
This makes the desktop act consistently with the file panels.
Thanks to Jonathan for his help with this branch.
* gdnd.c (perform_action): Use mc_lstat(), not mc_stat().
* glayout.c (update_panels): Do not update the panels that are
desktop panels.
* gdesktop.c (icon_is_in_area): An icon is not considered to be in
a 0x0 area.
* gpopup2.c (handle_open): Fetch the desktop icon from the
filename and call desktop_icon_info_open().
* gdesktop.c (desktop_icon_info_get_by_filename): New function to
look up a desktop icon by its filename.
* glayout.c (create_new_menu_from): Test for the ".desktop" suffix
correctly.
* gpopup2.c (handle_properties): If the file comes from a desktop
panel, always allow edition of the icon image.
1999-03-10 Federico Mena Quintero <federico@nuclecu.unam.mx>
* file.c (erase_dir): Erase metadata for directories as well.
(erase_dir_iff_empty): Likewise.
(copy_file_file): Delete/copy the metadata even for
char/block/sock/fifo files. Same thing for when copying symlinks.
(copy_dir_dir): Delete/copy the metadata.
(move_dir_dir): Delete/move the metadata.
(recursive_erase): Delete the metadata.
* gdesktop.c (desktop_icon_info_open): Launch a panel at the
location of the mount point.
* gmount.c (setup_devices): Use g_list_free, not g_free. Fed,
test your fixes to my code ;-)
* glayout.c (create_container): Add a Desktop menu if the WM is
not GNOME compliant.
* setup.c: Declare extern int tree_panel_visible for the GNOME
version.
1999-02-18 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gmount.c (gmount_setup_devices): New function to set up the
mountable devices on the desktop directory. Moved over from
gdesktop.c. Added an argument that specifies whether it should
clean up the device list first.
(cleanup_devices): Delete the metadata for the devices.
(setup_devices): Free the list of device names. Use the proper
icon for each device.
(create_device_link): Better error checking.
* gdesktop.c (create_desktop_dir): Use gmount_setup_devices().
(desktop_icon_info_destroy): Made static.
(desktop_popup_items): The command for rescanning mountable
devices should go here.
(handle_rescan_devices): Call gmount and refresh the desktop.
* gdesktop.h: Removed the declaration of tree_panel_visible, since
it has nothing to do with the desktop.
* glayout.c (gnome_panel_commands_menu): Removed the recreate
devices command.
* gdesktop.c (desktop_popup_items): Added a new command to create
a file window.
* gpopup.c (create_actions): Add support for mountable icons.
* gdesktop.c (try_to_mount): Add an option to automatically mount
links on the desktop that point to devices.
(is_mountable): Returns true if a pathname is mountable.
* glayout.c: Add the dirsizes command here.
* gmount.c: New file. Implements support routines for
mount/umount.
* gdesktop.c (reload_desktop_icons): Move metadata_unlock after
the positioning loop (as we use the metadata there too).
(desktop_icon_info_new): Accept a new parameter: url.
(drop_url): New function. Creates the files that represent urls
on the desktop.
(text_changed_url): New routine to handle url-renames
Use the metadata "desktop-url" property to figure out if an icon
represents an url.
* gdesktop.c (desktop_drag_data_received): Do not force links on
the desktop.
* gscreen.c (panel_create_file_list): Do not use
GTK_DEST_DEFAULT_ALL for the drop site. Only use
GTK_DEST_DEFAULT_DROP, since we need to check motion ourselves.
(panel_clist_drag_motion): Do not allow dropping on the clist buttons.
(panel_clist_button_press): Do not assign the
panel->maybe_drag_start flag if the user clicked outside the clist_window.
* gdesktop.h: Removed old crud (desktop_icon_t, icon_t).
seems fine.
1999-01-21 Jonathan Blandford <jrb@redhat.com>
* glayout.c: comment out compare panels.
* gnome-file-property-dialog.h: new file. This is a new widget
for the file-properties dialog. It doesn't handle mode changes
quite right yet, but does everything else beautifully...
* gnome-file-property-dialog.c: new file
* gpopup.c (panel_action_properties): use new dialog
(dicon_properties): as above.
* gdesktop.c (icon_event): Rewrote event handling for icons on the
desktop. This function handles button presses and releases and
does some anal-retentive checking to avoid stuck pointer grabs.
(icon_event_after): New fallback function for button presses.
This is only called when an icon is being edited and the user
clicks outside the icon's text item, indicating that editing
should be accepted and terminated.
(selection_stopped): New callback used to re-install the mouse
grab once the icon text item stops selecting text.
* gdesktop.h (DesktopIconInfo): Removed the finishing_selection
flag now that the event handling code is cleaned up.
* gdesktop.c (select_range): Fixed selection of ranges where the
starting and ending icons are in the same vertical or horizontal
slot.
(reload_desktop_icons): Fixed incorrect usage of
g_list_remove_link(). Also, moved the functionality from the old
load_desktop_icons() here. Now all icons are always loaded
efficiently, and there is no need for the "incremental" flag.
(desktop_icon_info_delete): Delete the icon position information.
* gmetadata.c (gmeta_del_icon_pos): New public function to delete
the icon position information from a file.
* gdesktop.c (find_icon_by_drag_context): Made static.
* gdesktop.h (DesktopIconInfo): Now that this type is public,
renamed it from struct desktop_icon_info, for consistency.
1998-12-29 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gdesktop.c (desktop_icon_delete): New function, used for
dicon_delete.
(load_desktop_icons): Implemented the incremental reloading of
desktop icons. This should make the code much nicer.
(reload_desktop_icons): Call x_flush_events to force a display at
that point.
* gpopup.c (dicon_delete): Implement this operation.
(desktop_icon_execute): Use the existing implementation for
launching desktop icons instead of a new hacked up version
(desktop_icon_actions): Until copy/move is implemented, do not
even list them to the user.
* gdesktop.c (create_desktop_dir): No trashcan setup until it
works.
* gscren.c (panel_widget_motion): Use button 2 for dragging and
asking.
* gdesktop.c (desktop_icon_info_new): Connect the signals for DnD
so that we can drag icons from the desktop.
(drag_begin): New function to set the drag cursor for icons on the desktop.
(button_press): New function that stores the hot spot position for
DnD cursors.
(drag_data_get): New function to fetch the URI-list of selected icons.
* gdialogs.c: Fixed some includes.
* gdesktop.h: Removed the DnD target enum from here, since it is
specific to each submodule.
* gdnd.h: Moved the DnD target enums to here. Added a new
TARGET_MC_DESKTOP_ICON.
* gdesktop.c (get_icon_snap_pos): Fixed icon snapping; the
coordinates not being updated correctly.
* gscreen.c (panel_drag_data_get): Free the uri list; it was being leaked.
* gdesktop.c (setup_desktop_dnd): New function to set up drops
to the root window.
(setup_xdnd_proxy): Function by Owen Taylor to set up a DnD proxy
window.
(drag_data_received): Function to handle drops on the root window.
(desktop_destroy): Destroy the DnD setup.
(reload_desktop_icons): New function to reload the desktop.
* gscreen.c (drag_types, drop_types): Removed url-list; only
uri-list should be there.
* gdesktop.h: Removed TARGET_URL_LIST from the DnD enumerations.
* Makefile.in: Removed gtrans.c from the list of sources.
* gdesktop-icon.c: #ifdef cleanups.
* gscreen.c (panel_create_file_list): Doh. Return the scrolled
window, not the clist.
* gdnd.c (get_action): Implement the DnD actions menu.
1998-11-10 Federico Mena Quintero <federico@nuclecu.unam.mx>
* setup.c: Removed the icons_snap_to_grid and
want_transparent_{icons,text} options.
* gdesktop.c: We are now using the new desktop icon code. It is
not yet complete, but what is there does work. We have icon
creation, auto-layout and snapping. Next step is drag and drop
and popup menus.
* glayout.c: #ifdef out the stuff that uses the old desktop code.
I will replace it gradually.
* gmain.c: Likewise.
* gscreen.c: Likewise.
1998-10-21 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gdesktop.c (create_desktop_icon): Renamed from
my_create_transparent_text_window. Now uses the DesktopIcon
widget for its work.
(get_desktop_icon_for_dentry): Renamed from
get_transparent_window_for_dentry. Uses the DesktopIcon widget.
(get_desktop_icon_for_di): Renamed from
get_transparent_window_for_di.
(desktop_icon_properties): Do not size_request the icon, since now
we can get its dimensions directly from the DesktopIcon structure.
* desktop-icon.[ch]: New file that takes care of desktop icons.
It provides the spiffy widget that is used for them.
* Makefile.in: Added desktop-icon.[ch] to the list of sources.
MC should use Automake, I think.
1998-05-22 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gwidget.c (x_create_input): Disable the use of the GNOME entries
for now, as they are very slow. We need to figure out what is
wrong with this.
With this change, dialog boxes close quickly instead of taking
ages to close.
* gscreen.c, gdesktop.c (file_popup_add_context, file_popup):
Share the context menu code in gdesktop.c and gscreen.c. The
desktop pop up menus now include all of the stuff that would have
appeared in the Panel.
* gdesktop.c (desktop_icon_remove): Remove the file associated
with this desktop entry if it is on the ~/desktop directory.
2. Load/Save desktop-icon transparent state.
3. Add arrange icons code.
4. Add snap to grid option (default now).
5. Fixed viewer crash.
Still left to do:
- Nice config dialog to set the above variables.
* gdesktop.h: Added extern declarations for the
want_transparent_icons and want_transparent_text variables.
* gtrans.c (set_window_text): Now we use the new global variables
want_transparent_icons and want_transparent_text to decide how to
paint the pixmap and mask. The want_transparent_* variables can
thus be configured for the smartness/speed of your X server when
using shaped windows.
* gdesktop.c (get_transparent_window_for_dentry): New function,
creates the proper transparent icon window for a dentry.
(post_setup_desktop_icon): New function, does post-setup stuff for
a desktop icon (setting it as a drop target, positioning it, etc.).
* gpageprop.c (item_properties): Now the dentry parameter is a
desktop_icon_t instead.
We now return a bitmask that indicates what stuff changed. The
caller can use this information to decide what to update, repaint, etc.
* gdesktop.h: Moved the icon_t and desktop_icon_t structures here.
* gpageprop.c (item_properties): Insert icon control if appropriate.
* gprop.c (gprop_icon_new):
(gprop_icon_get_data): Renamed from gprop_dir_*().
* gscreen.c (panel_action_properties): Re-reads panel only if necessary.
*gpageprop.c (item_properties): now returns TRUE if something got
changed, FALSE otherwise. This should be used to decide whether
to re-read the panel or not.
* gpageprop.c: #include "../vfs/vfs.h".
#include "dialog.h".
* gprop.c (gprop_dir_new):
(gprop_perm_new):
(gprop_general_new): Connect to the destroy signal of the toplevel
widget and destroy the Gprop structure on the callback.
* gdesktop.c (desktop_create_launch_entry): Support for the "Drop"
target in mc.ext now.
* Add support for dragging the icons on the desktop.
(desktop_icon_make_draggable): new function.
(drop_from_event): simplify.
(my_create_transparent_text_window): Get the motion notify event.
(drops_from_event): create a vector based on thge drop event.
(drop_cb): splitted, call url_drop for regular drops, otherwise it
is a icon drop.
(artificial_drag_start): new routine, used now by gscreen.c and
gdesktop.c
(drop_on_directory): Check result value of operation.
(desktop_icon_set_position): sane interface.
(stop_desktop): Flush all of our state to disk.