mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 04:46:55 +03:00
1998-05-20 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gpageprop.c (item_properties), gprop.c: Add executable editing (command, and terminal). Save the dentry after modification 1998-05-19 Miguel de Icaza <miguel@nuclecu.unam.mx> * gprop.c (change_icon): Test for gp, as the combobox emits the "changed" signal when shutting down. Great. * gdesktop.c (desktop_reload): Missing mc_closedir (desktop_setup_icon): Fix memory leak. (get_desktop_icon): Fix memory leak. (desktop_create_directory_entry): Set the size of the exec vector. (desktop_create_launch_entry): Same. We now create launch entries instead of trying to support regular dropped stuff on the desktop, this makes things easier and more consistent. 1998-05-19 Miguel de Icaza <miguel@nuclecu.unam.mx> * ext.c: Memory leak fixed.
This commit is contained in:
parent
63780b9800
commit
4de36e79d8
@ -1,3 +1,8 @@
|
||||
1998-05-20 Miguel de Icaza <miguel@nuclecu.unam.mx>
|
||||
|
||||
* gpageprop.c (item_properties), gprop.c: Add executable editing
|
||||
(command, and terminal). Save the dentry after modification
|
||||
|
||||
1998-05-19 Miguel de Icaza <miguel@nuclecu.unam.mx>
|
||||
|
||||
* gprop.c (change_icon): Test for gp, as the combobox emits the
|
||||
|
@ -55,6 +55,7 @@ item_properties (GtkWidget *parent, char *fname, desktop_icon_t *di)
|
||||
GpropFilename *name;
|
||||
GpropPerm *perm;
|
||||
GpropGeneral *gene;
|
||||
GpropExec *exec;
|
||||
GtkDialog *toplevel;
|
||||
|
||||
umode_t new_mode;
|
||||
@ -88,11 +89,14 @@ item_properties (GtkWidget *parent, char *fname, desktop_icon_t *di)
|
||||
if (di && di->dentry) {
|
||||
gene = gprop_general_new (di->dentry->name, di->dentry->icon);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), gene->top, FALSE, FALSE, 0);
|
||||
|
||||
exec = gprop_exec_new (di->dentry);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), exec->top, FALSE, FALSE, 0);
|
||||
} else {
|
||||
name = gprop_filename_new (fname, base);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), name->top, FALSE, FALSE, 0);
|
||||
}
|
||||
|
||||
name = gprop_filename_new (fname, base);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), name->top, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
perm = gprop_perm_new (s.st_mode, get_owner (s.st_uid), get_group (s.st_gid));
|
||||
|
||||
/* Pack them into nice notebook */
|
||||
@ -183,33 +187,37 @@ item_properties (GtkWidget *parent, char *fname, desktop_icon_t *di)
|
||||
|
||||
/* Check and change filename */
|
||||
|
||||
gprop_filename_get_data (name, &new_name);
|
||||
if (di && di->dentry){
|
||||
gprop_exec_get_data (exec, di->dentry);
|
||||
} else {
|
||||
gprop_filename_get_data (name, &new_name);
|
||||
|
||||
if (strchr (new_name, '/'))
|
||||
message (1, "Error", "The new name includes the `/' character");
|
||||
else if (strcmp (new_name, base) != 0) {
|
||||
char *base = x_basename (fname);
|
||||
char save = *base;
|
||||
char *full_target;
|
||||
|
||||
*base = 0;
|
||||
full_target = concat_dir_and_file (fname, new_name);
|
||||
*base = save;
|
||||
|
||||
create_op_win (OP_MOVE, 0);
|
||||
file_mask_defaults ();
|
||||
move_file_file (fname, full_target);
|
||||
destroy_op_win ();
|
||||
|
||||
if (di) {
|
||||
free (di->pathname);
|
||||
di->pathname = full_target;
|
||||
} else
|
||||
free (full_target);
|
||||
|
||||
retval |= GPROP_FILENAME;
|
||||
if (strchr (new_name, '/'))
|
||||
message (1, "Error", "The new name includes the `/' character");
|
||||
else if (strcmp (new_name, base) != 0) {
|
||||
char *base = x_basename (fname);
|
||||
char save = *base;
|
||||
char *full_target;
|
||||
|
||||
*base = 0;
|
||||
full_target = concat_dir_and_file (fname, new_name);
|
||||
*base = save;
|
||||
|
||||
create_op_win (OP_MOVE, 0);
|
||||
file_mask_defaults ();
|
||||
move_file_file (fname, full_target);
|
||||
destroy_op_win ();
|
||||
|
||||
if (di) {
|
||||
free (di->pathname);
|
||||
di->pathname = full_target;
|
||||
} else
|
||||
free (full_target);
|
||||
|
||||
retval |= GPROP_FILENAME;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Check and change title and icon -- change is handled by caller */
|
||||
|
||||
if (di && di->dentry) {
|
||||
@ -231,6 +239,5 @@ item_properties (GtkWidget *parent, char *fname, desktop_icon_t *di)
|
||||
}
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (toplevel));
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ label_new (char *text, double xalign, double yalign)
|
||||
label = gtk_label_new (text);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), xalign, yalign);
|
||||
gtk_widget_show (label);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
@ -91,7 +92,58 @@ gprop_filename_get_data (GpropFilename *gp, char **filename)
|
||||
}
|
||||
}
|
||||
|
||||
/***** Permissions *****/
|
||||
/* Executable */
|
||||
GpropExec *
|
||||
gprop_exec_new (GnomeDesktopEntry *dentry)
|
||||
{
|
||||
GpropExec *ge;
|
||||
GtkWidget *frame, *table;
|
||||
char *s;
|
||||
|
||||
ge = g_new (GpropExec, 1);
|
||||
ge->top = gtk_vbox_new (FALSE, 6);
|
||||
|
||||
frame = gtk_frame_new (_("Command"));
|
||||
gtk_box_pack_start (GTK_BOX (ge->top), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
table = gtk_table_new (0, 0, 0);
|
||||
gtk_container_border_width (GTK_CONTAINER (table), 6);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table), label_new (_("Command:"), 0.0, 0.5),
|
||||
0, 1, 0, 1,
|
||||
GTK_FILL, GTK_FILL, 0, 0);
|
||||
|
||||
ge->entry = gnome_entry_new ("gprop_filename_entry");
|
||||
s = gnome_config_assemble_vector (dentry->exec_length, (const char * const *) dentry->exec);
|
||||
gtk_entry_set_text (GTK_ENTRY (gnome_entry_gtk_entry (GNOME_ENTRY (ge->entry))), s);
|
||||
g_free (s);
|
||||
gtk_table_attach (GTK_TABLE (table), ge->entry,
|
||||
1, 2, 0, 1, 0, 0, 0, 0);
|
||||
ge->check = gtk_check_button_new_with_label (_("Use terminal"));
|
||||
GTK_TOGGLE_BUTTON (ge->check)->active = dentry->terminal ? 1 : 0;
|
||||
gtk_table_attach (GTK_TABLE (table), ge->check,
|
||||
1, 2, 1, 2, 0, 0, 0, 0);
|
||||
gtk_widget_show_all (ge->top);
|
||||
return ge;
|
||||
}
|
||||
|
||||
void
|
||||
gprop_exec_get_data (GpropExec *ge, GnomeDesktopEntry *dentry)
|
||||
{
|
||||
GtkEntry *entry;
|
||||
|
||||
entry = GTK_ENTRY (gnome_entry_gtk_entry (GNOME_ENTRY (ge->entry)));
|
||||
gnome_string_array_free (dentry->exec);
|
||||
gnome_config_make_vector (gtk_entry_get_text (entry),
|
||||
&dentry->exec_length, &dentry->exec);
|
||||
dentry->terminal = GTK_TOGGLE_BUTTON (ge->check)->active;
|
||||
}
|
||||
|
||||
/***** permissions *****/
|
||||
|
||||
static umode_t
|
||||
perm_get_umode (GpropPerm *gp)
|
||||
|
@ -57,5 +57,12 @@ typedef struct {
|
||||
GpropGeneral *gprop_general_new (char *title, char *icon_filename);
|
||||
void gprop_general_get_data (GpropGeneral *gp, char **title, char **icon_filename);
|
||||
|
||||
typedef struct {
|
||||
GtkWidget *top;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *check;
|
||||
} GpropExec;
|
||||
|
||||
GpropExec *gprop_exec_new (GnomeDesktopEntry *dentry);
|
||||
|
||||
#endif
|
||||
|
@ -494,9 +494,9 @@ panel_action_properties (GtkWidget *widget, WPanel *panel)
|
||||
file_entry *fe = &panel->dir.list [panel->selected];
|
||||
char *full_name = concat_dir_and_file (panel->cwd, fe->fname);
|
||||
|
||||
if (item_properties (GTK_WIDGET (panel->list), full_name, NULL) != 0)
|
||||
if (item_properties (GTK_WIDGET (panel->list), full_name, NULL) != 0){
|
||||
reread_cmd ();
|
||||
|
||||
}
|
||||
free (full_name);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user