is_template. Use mc_mkstemps() is it's TRUE. Change all
callers.
* gcmd.c (gnome_new_link): Don't calculate the filename, trust
desktop_create_url() to do it.
* gdnd.c (drop_url_on_directory): Likewise. Add support for
drag and drop from Mozilla.
* gdesktop.c, gdnd.c, gaction.c, gicon.c,
gnome-file-property-dialog.c, gpopup.c, gpopup2.c, gprefs.cgmain.h,
setup.c: Add option of using GNOME "magic" routines to determine file
types. This makes MC intelligently look at the data in the file to see
what type of file it is, rather than looking at the filename extension.
This slows down MC quite a bit, so it has been made an optional
preference item. Type detection is expected to improve as mime-magic
matures.
* gdnd.c (file_has_drop_action): New function to test whether a
file has the drop-action metadata or MIME action property.
(gdnd_validate_action): Take the drop-action metadata/MIME
property into account.
(gdnd_can_drop_on_file): New function to see whether a
non-directory file can take drops.
* gscreen.c (drop_on_panel): New helper function to drop stuff on
a panel. This uses gdnd_can_drop_on_file so that we have the
correct behavior. This enables dropping on executables and files
with the drop-action metadata/MIME property again.
(panel_icon_list_drag_data_received): Use drop_on_panel().
(panel_clist_drag_data_received): Use drop_on_panel(). Normalize
the Y coordinate to the clist_window.
* ext.c (quote_block): How did this ever work? People, if you
realloc() things, don't keep pointers to stuff inside the original
block.
* screen.c (do_enter_on_file_entry): Pass in the full name to
if_link_is_exe().
* dir.[ch] (if_link_is_exe): Take in the full name, not the directory
and the file entry.
1999-08-26 Federico Mena Quintero <federico@redhat.com>
* gscreen.c (panel_clist_drag_motion): Pass the full name to
gdnd_validate_action().
(panel_icon_list_drag_motion): Likewise.
(panel_tree_drag_motion): Likewise.
* gdnd.c (gdnd_perform_drop): Renamed the "directory" argument to
"dest_full_name" for clarity.
(gdnd_validate_action): Likewise. Pass in the full name to
if_link_is_exe().
(drop_on_file): Do not compute the full name, since we are already
get it from the caller.
(drop_on_file): Pass in the full name to if_link_is_exe().
* gscreen.c (panel_tree_drag_data_received): Free the pathname.
* gdesktop.c (icon_drag_data_received): Pass the full name of the
file to gdnd_perform_drop(), not just the desktop directory.
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
* 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.
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_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.
* 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.
Sun Feb 7 05:29:17 1999 Timur Bakeyev <mc@bat.ru>
* Makefile.in: Remove references and dependences to/from libslang -
we don't need this in GNOME. Changed the order of linking - libgtkedit
require libgnomeui.a, so swap $(LDFLAGS) and $(EXTRALIBS). The same for
corba edition.
gdnd.c, gmetadata.c, gpopup2.c, gtools.c: Adde #include "global.h" or
move it before #include <gnome.h> to avoid warnings about redefining
MIN, MAX nad RE_DUP_MAX. More clean compiling.
* gpopup2.h: New file - to avoid errors during "make distcheck". What
it is for, really?
* gmain.h: Added prototype for gmc_open_filename().
* gdesktop.c (desktop_icon_info_open): Fixed call to
gmc_open_filename(). See why it is good to have prototypes? :-)
* gdnd.c (perform_action): Oops. Removed a leftover "break" that
was causing the loop to exit, so you could not operate on more
than one file.
* gtkedit/gtkedit.c: Hack to get a string defined in a macro into
the catalog file.
1999-02-02 Tuomas Kuosmanen <tigert@gimp.org>
* new_icons/gnome-core.png: New icon for core files. Someone
please add the code part :)
* gdnd.c (gdnd_validate_action): Added an "on_desktop" argument;
this specifies that the user is dragging over the desktop. Added
cases for drags of desktop icons and URLs.
(gdnd_perform_drop): New public function to handle drops. This is
now the master function to handle drops -- use this to make all of
MC consistent.
(drop_on_directory): Made static and renamed from
gdnd_drop_on_directory(). Made it fit for use by
gdnd_perform_drop().
(drop_url_on_directory): New function to drop an url on a
directory, moved over from gdesktop.c.
(drop_uri_list_on_directory): New function to handle drops of URI
lists on a directory.
(drop_on_file): New function to handle drops on a non-directory
file entry. This is moved over from gdesktop.c,
desktop_icon_drop_uri_list(). This is yet to be finished.
* gdesktop.c (desktop_icon_drop_uri_list): Fix memory leak.
(desktop_drag_motion): Use gdnd_validate_action().
(dnd_icon_targets): Allow dropping URLs on icons.
(icon_drag_motion): Use gdnd_validate_action().
(desktop_drag_data_received): Use gdnd_perform_drop().
(icon_drag_data_received): Use gdnd_perform_drop().
* gscreen.c (panel_icon_list_drag_data_received): Use
gdnd_perform_drop().
(panel_clist_drag_data_received): Use gdnd_perform_drop().
(panel_tree_drag_data_received): Use gdnd_perform_drop().
* gcmd.c (gnome_about_cmd): Fixed Foundation typo, and updated the
copyright date.
* gscreen.c (panel_clist_motion): Stop the emission of the
motion_notify_event signal so that it does not reach the clist.
We do not want it to select rows while dragging.
Replaced copy_strings() with g_strconcat().
* gdnd.c (gdnd_validate_action): Do not override GDK_ACTION_ASK.
* gdesktop.c: Updated the TODO list at the top of the file.
* gscreen.c (panel_setup_drag_scroll): Renamed from
panel_setup_drag_motion().
(panel_clist_drag_motion): Use gdnd_validate_action().
(panel_clist_motion): Return immediately if the event window is
not the clist_window. Otherwise, forward the event to
panel_widget_motion().
* gdnd.c (gdnd_find_panel_by_drag_context): New public function to
find a panel based on a drag context. This is basically the old
find_panel_owning_window() made public.
(gdnd_drop_on_directory): Test for the source widget being a tree,
and if so, do not use the default behavior for panels.
(gdnd_validate_action): New function to compute the final drag
action given some conditions. This is now used to make dragging
behavior consistent across the desktop and the file panels.
* gdnd.c (get_action): Sensitize the menu items based on the
allowed actions in the drag context.
(actions): Add some underlined accelerators for the action menu.
* gdesktop.c (icon_drag_motion): Use S_ISDIR() in addition to
fe->f.link_to_dir.
* gscreen.c (panel_file_list_scrolled): Removed this function, as
it was not used for anything useful.
* gdnd.c (gdnd_drop_on_directory): Duh. Use context->action, not
context->suggested_action.
1999-01-25 Federico Mena Quintero <federico@nuclecu.unam.mx>
* Makefile.am (libvfs_la_SOURCES): Added utilvfs.h.
* Make-mc.in (VFSHDRS): Likewise.
* gdesktop.c (setup_icon_dnd_dest): Always specify ACTION_MOVE,
since we want to be able to move the icons around. Connect to the
drag_motion signal.
(dnd_icon_targets): List desktop icons as a target to be able to
move them just a notch in the desktop.
(icon_drag_motion): Decide which action we can use for dropping
stuff on a desktop icon.
(setup_icon_dnd_dest): Always specify all the actions.
(icon_drag_data_received): Allow for icons to be moved just a
notch by accepting drops from icons.
* gdnd.h: Added #defines for the DnD target type names.
* gdnd.c (gdnd_init): New public function to intern the target
atom names.
(gdnd_drag_context_has_target): New public function to see if a
drag context has a certain target type.
* gdesktop.c (setup_desktop_dnd): Do not use
GTK_DEST_DEFAULT_MOVE, and connect to drag_motion.
(desktop_drag_motion): If we are dragging from a desktop icon,
indicate the action as MOVE. Otherwise, force the action to be
LINK unless the user explicitly requested ASK.
(setup_desktop_dnd): Intern the atoms for the drop targets.
* gscreen.c (panel_icon_list_drag_data_received): Do not update
contents if nothing was done (ie, the drop was cancelled).
* gdnd.c (gdnd_drop_on_directory): Do nothing if the files dragged
are on the same directory we are.
even recognize it.
1998-12-16 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gdialogs.c (create_op_win): Remove second spurious packing.
(create_op_win): OP_MOVE uses the same stuff OP_COPY does. Fix
this.
(file_progress_show_target): More compliant to the original
functions.
(file_progress_show_source): More compliant to the original
functions.
* gdesktop.c (create_desktop_dir): Fix mem leak.
Miguel.
* gscreen.c (load_imlib_icons): Make it use the new gicon files.
* gicon.c, gicon.h: New files: they keep an image cache and
provide the right icon to use based on the filename. They use the
GNOME metadata to fecth the "icon-filename" and "icon-inline-png"
keys.
* gdialogs.c (file_mask_dialog): Commented the help messages until
the warnings are figured out.
* cmd.c, tree.c: Updated to the new file.c api.
* file.c: (copy_file_file, copy_dir_dir, move_file_file,
move_dir_dir): Updated to work with the new updating stuff.
* setup.c: New configuration option to compute the totals to be
transfered.
* file.c (compute_dir_size, panel_compute_totals): New routines to
compute the total ammount of information that is going to be
transfered.
* Makefile.in (OOBJS): Add filegui.o back until the GTK-specific
filegui is written.
* gdesktop.c (check_window_in_one_panel): Provide better error
messages here for debugging purposes.
Disable stubs for filegui.c until they are actually implemented.
I need to debug stuff.
* gdnd.c (find_panel_owning_window): Use the new
gtk_drag_get_source_widget function to find out reliably if the
drag source happens to be in this application.
* gscreen.c (x_create_panel): Set the usize for the ministatus
label to be (0, -1), this means: do not request any horizontal
space, use any vertical space given.
Put the ministatus inside an hbox, and use
gtk_container_set_resize_mode in this hbox to stop any queue
events from being propagated up in the hierachy of widgets
This kills all of the CList/GnomeIconList/Scrollbar/Toolbar
flickering now.
* Makefile.in (OOBJS): Do not link ../src/filegui.o. GMC does not
link right now, but I guess I'll add stubs until we finish with
the dialog boxes.
* gdnd.c: #include <sys/types.h>
* Makefile.in (checklinks): Fix sourcelinks -> maksourcelinks typo.
* 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.
1998-11-09 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gdnd.c: New file that handles all the DnD stuff. Mainly used to
clean up gdesktop.c.
* gscreen.c (panel_icon_list_drag_data_received): Use
gdnd_drop_on_directory().
(CLIST_FROM_SW): Added this macro to fetch the clist from the
scrolled window in panel->list.
(panel_create_file_list): Create a scrolled window and put the
clist inside it. This is required per the new clist API.
(panel_configure_file_list): Use the scrolled window's adjustment.
(panel_file_list_size_allocate_hook): Use the scrolled window
instead of the clist.
(panel_file_list_compute_lines): Use the scrolled window instead
of the clist.
(panel_file_list_configure_contents): Use the scrolled window
instead of the clist.
(panel_create_file_list): Do the DnD setup here, not in the
realization callback.
(x_create_panel): Do not realize the panel explicitly.
(panel_create_pixmaps): Create the pixmaps using imlib instead of
Gdk.