* gtkflist.[ch]: New files. This is a "file list" widget derived
from GtkCList that does several things:
- Overrides all mouse and keyboard event handlers.
- Implements its own, *sane* selection behavior, unlike
GtkCList's, which is broken.
- Implements the same selection behavior as the desktop,
which is a) correct, and b) consistent.
* gscreen.c (panel_create_file_list): Use the GtkFList widget.
(panel_widget_motion): Changed the drag thresholds to be the same
as in gtkdnd.c.
(start_drag): New convenience function to begin a drag operation.
(panel_widget_motion): Use start_drag().
(panel_clist_scrolling_is_desirable): Offsets must be with respect
to the clist_window, not to the allocation.
(panel_clist_drag_motion): Normalize the y coordinate of the
motion event to the clist_window.
* gdesktop.c (desktop_icon_info_destroy): Reset the
last_selected_icon to NULL if it is destroyed.
* Makefile.in: Added gtkflist to the list of files.
* gscreen.c: make sure that we bring up an open_with if
open it.
* gcmd.c (gnome_select): new selection dialog.
* gdesktop-init.c (desktop_init_at): do not use access for it is
poor when you are root.
1999-04-07 Jonathan Blandford <jrb@redhat.com>
* screen.c (do_enter_on_file_entry): added a consistent behaviour
for GNOME stuff.
* glayout.c (create_container): Use gtk_window_set_default_size(),
not gtk_widget_set_usize().
* gdesktop.c (get_slot_from_pos): Clamp the slot positions to be
inside the screen.
* gmain.c (gnome_check_super_user): Improved the message a bit.
* gmetadata.c (gmeta_del_icon_pos): New function to delete the
icon position metadata from a file.
* gcmd.c: Removed unused function gnome_quit_cmd().
1999-04-05 Federico Mena Quintero <federico@nuclecu.unam.mx>
* main.c (main): Call mc_tree_store_save() when the program
terminates.
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'.
Ok, so this time I got the stuff to auto-load desktop startup links.
This means you can ship stuff to pre-configure the desktop of the
users now.
We support program-based setup and url-links.
Details on the lib/README.desktop file
* 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.
* gdesktop.c (text_changed): If the file has the "icon-caption"
metadata set, then change that instead of renaming the file. This
can be used by URLs and is also needed by the mountable device
icons.
(text_changed_url): Removed this function now that text_changed()
can handle all cases.
* gdnd.c (drop_url_on_directory): Set the "icon-caption" metadata
for URLs.
* gdesktop.c (icon_event): Handle button-2 clicks and drags
properly.
* file.c (erase_file): Here we need to mc_lstat(), not mc_stat().
Since we use the resulting buf.st_size to update the progress, we
need the size of unresolved links. This also makes it consistent
with screen.c:do_file_mark().
* screen.c (select_item): Return immediately if this is a desktop
panel.
1999-03-12 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gdesktop.c (create_panel_from_desktop): Do not assert that
panel->count > 0, because we may actually not have any icons in
the desktop.
(desktop_popup): Reload the desktop once the popup menu is done.
(create_panel_from_desktop): Be consistent with the way totals are
computed in screen.c:do_file_mark().
* gdesktop.c (create_panel_from_desktop): Do not assert that
panel->count > 0, because we may actually not have any icons in
the desktop.
(desktop_popup): Reload the desktop once the popup menu is done.
* 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.
* gdesktop.c (desktop_icon_info_open): Set the cursor to a watch
while the icon is being opened. Also, fixed memory leaks.
(do_eject): Added a missing return value.
* gdesktop.c (do_mount_umount): Use g_readlink here.
* gpopup2.c (handle_eject): Small tuning. And use g_readlink :-).
* gmount.c (mount_point_to_device): New function. Mapes a mount
point to its device. Required since we are now using the mount
point (as this is not ambiguous) as the key for the devices and
the eject command needs the device name, not the mount point.
* gdesktop.c (desktop_icon_info_open): First try to see if
filename is mountable. Then do the directory tests and the file
launching tests. Fixes mount-by-double click.
* gmount.c (setup_devices): Use new tigert icon.
* gdesktop.c (update_url): Made static.
(desktop_reload_icons): Call update_url() when updating an
existing icon.
* gpopup2.c (handle_properties): Do not update the icon url here.
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 (icon_drag_data_received): Pass the full directory
name to gdnd_perform_drop.
* gpopup.c (create_regexp_actions): This routine no longer creates
the default copy/move/delete context menu entries.
(file_actions): Include the copy/move/delete options here. This
also enabled me to reorder things to put "Delete" closer to the
top, as it is a pretty common operation.
* gutil.c (my_system_get_child_pid): reset SIGPIPE to a sensible
value.
(my_system_get_child_pid): Close also stdin/stdout/stderr
* gdesktop.c (is_mountable): Allow user-nfs devices to be mounted
* gdesktop.c (desktop_icon_info_open): Ugly. Needs to share more
code here. Use the metadata first, and the is_exe to find out how
to launch an application.
* gicon.c (gicon_get_filename_for_icon): Return const char *, this
tells the user of this routine "you better not touch or free this
you dofus".
* gnome-file-property-dialog.c (apply_metadata_change): Always set
the name of the icon to the new value, as the entry will always
match the imlib image anyways (due to the fixes I did to const
correctness).
(generate_icon_sel): Do not free the value. We do not own this
return value.
* gdesktop.c (is_mountable): NULL terminate string returned from
readlink. Yes guys, readlink does not NULL terminate things.
(do_mount_umount): ditto.
* gnome-file-property-dialog.c (init_metadata): ditto
* gdesktop.c (desktop_drag_data_received): Simplify.
* gscreen.c (panel_icon_list_drag_data_received): Pass the full
path to gdnd_perform_drop.
(panel_clist_drag_data_received): same.
* gdnd.c (drop_on_directory): We no longer take a file_entry
here. The directory we get passed is already a fully qualified
name of the target location.
* gwidget.c (x_create_input): Hook to the changed signal and sync
the input with our view of the entry. This fixes the paste bug
reported.
* 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.
* dir.c (if_link_is_exe): Made this function take in a directory
argument as well -- the sought file may not be in the cwd, and
file entries do not carry the directory the file refers to.
* screen.c (do_enter_on_file_entry): Pass in the cpanel->cwd to
if_link_is_exe().
1999-02-17 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gdesktop.c (do_mount_umount): Removed unused variable.
(do_eject): Return FALSE if there is no eject command.
(setup_devices): Removed unused variable.
* gdnd.c (drop_on_file): Pass the directory to if_link_is_exe().
(gdnd_validate_action): Likewise.
(gdnd_perform_drop): Made consistent with the rest of the code by
taking the directory name along with the file entry.
(gdnd_validate_action): Likewise.
* gdesktop.c (icon_drag_motion): Pass the directory to the gdnd
functions.
(icon_drag_data_received): Likewise.
(desktop_drag_motion): Likewise.
(desktop_drag_data_received): Likewise.
(desktop_icon_info_open): Pass the directory to if_link_is_exe().
* gscreen.c (panel_icon_list_drag_data_received): Pass the
directory to gdnd functions.
(panel_clist_drag_data_received): Likewise.
(panel_tree_drag_data_received): Likewise.
(panel_clist_drag_motion): Likewise.
(panel_icon_list_drag_motion): Likewise.
* gdesktop.c (reload_desktop_icons): Load the information provided
on the .desktop file for the desktop icon information: icon
filename and text to be displayed.
* 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.
* gicon.c: Lots of changes to support the little symlink/stalled
icons that get overlaid on the normal file icons. We now have the
concept of an icon set, which is a cache of normal icons plus
their overlaid versions.
* gnome-file-property-dialog.c (apply_metadata_change): Use
gicon_get_filename_for_icon().
(generate_icon_sel): Likewise.
* gnome-file-property-dialog.c (create_general_properties): Use
buffers of size MC_MAXPATHLEN.
(init_metadata): Likewise.
* gmetadata.c: Removed the gmeta_del_icon_pos() function, since it
is no longer used anywhere.
* gdesktop.c (reload_desktop_icons): Use gnome_metadata_delete()
instead of gmeta_del_icon_pos().
(desktop_icon_info_delete): Likewise.
(desktop_icon_info_destroy): Do not call gnome_metadata_delete().
* gdesktop.c (reload_desktop_icons): Take auto-positioning and
snap-positioning into account. This is the right thing to do.
(get_icon_auto_pos): Do auto-positioning in two steps, first from
the requested position to the end of the slot array, then from
slot zero forwards if required.
Miguel.
1999-02-15 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gcmd.c (gnome_open_terminal_with_cmd): New routine, based on the
gnome_open_terminal routine, that will allow the user to specify a
command to execute (used internally).
* gaction.c (gmc_edit_filename): Support for the GNOME editor
environment properties.
* gdesktop.c (create_desktop_dir): Support GNOME_DESKTOP_DIR
variable to configure the desktop directory.
* gdesktop.c (desktop_popup): Handle popup menus for the desktop.
(arrange_desktop_icons): New function to auto-arrange the desktop
icons.
(reload_desktop_icons): Take care of positioning the new icons by
ourselves; do not rely on desktop_icon_info_new() to do it.
(remove_from_slot): Reset the icon's slot to -1.
(reload_desktop_icons): Show all the icons after they have been
loaded, instead doing it one by one.
* gscreen.c (file_list_popup): Handle popup menus for the blank
areas of the file panels.
(panel_icon_list_button_press): Call file_list_popup().
(panel_file_list_press_row): Likewise.
* gdesktop.c (desktop_icon_info_place): Better icon placement by
rounding to the proper slot number.
(select_range): Simpler range selection for exact Windows behavior.