1999-08-09 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gscreen.c (editing_icon_list): New function to figure out whether an icon in the icon list is being edited. This is a FANTASTICALLY UGLY HACK, but we cannot add new functions to the icon list at this point as it would break forwards compatibility. Sigh. BUGFIX: GNOME bug tracker #382, #1065. * glayout.c (gnome_panel_desktop_menu): Added some underline accelerators. * gdesktop.c (desktop_arrange_icons_items): Renamed to the desktop namespace. Added underline accelerators. (handle_arrange_icons_name): Made static. (handle_arrange_icons_type): Likewise. (handle_arrange_icons_size): Likewise. (handle_arrange_icons_access): Likewise. (handle_arrange_icons_mod): Likewise. (handle_arrange_icons_change): Likewise. (desktop_arrange_icons): Made static. (strip_tearoff_menu_item): Made it return the number of items in the menu, not the list of children. (desktop_icon_info_destroy): Remove the icon from the icon hash table. (text_changed): Update the icon hash table information. * gdesktop.h: Cleaned up some unused prototypes. * gview.c (view_status): Use the correct g_snprintf() format argument. * gcmd.c (sort_get_func_from_type): Indented according to the MC conventions. People, *PLEASE* follow the Gnome Programming Guidelines, especially when modifying existing code. * gdesktop.c (swap): Likewise. (auto_pos): Likewise. (get_icon_auto_pos): Likewise.
Этот коммит содержится в:
родитель
be51568dc6
Коммит
d8e892cb48
9
BUGS
9
BUGS
@ -1,7 +1,7 @@
|
|||||||
Bugzilla: 3436
|
Bugzilla: 3436
|
||||||
|
|
||||||
bugs.gnome.org:
|
bugs.gnome.org:
|
||||||
Important: 382, 1006, 1035/1412/1416, 1414, 1549, 1796
|
Important: 1006, 1035/1412/1416, 1414, 1549, 1796
|
||||||
Major cosmetic: 272/875, 487, 825, 845, 1845, 899, 923, 1072/1336,
|
Major cosmetic: 272/875, 487, 825, 845, 1845, 899, 923, 1072/1336,
|
||||||
1299, 1415, 1457, 1545, 1559, 1582, 1656, 1758, 1789
|
1299, 1415, 1457, 1545, 1559, 1582, 1656, 1758, 1789
|
||||||
Minor cosmetic: 55/208, 115, 308, 383, 398, 449, 479, 597, 781,
|
Minor cosmetic: 55/208, 115, 308, 383, 398, 449, 479, 597, 781,
|
||||||
@ -10,13 +10,6 @@ bugs.gnome.org:
|
|||||||
Non-essential or feature: 779?, 448, 1133, 1121, 1122, 1251
|
Non-essential or feature: 779?, 448, 1133, 1121, 1122, 1251
|
||||||
Look at bug yourself: 1613, 1458, 1773
|
Look at bug yourself: 1613, 1458, 1773
|
||||||
|
|
||||||
382: Steps to reproduce: Start editing a file label.
|
|
||||||
Drag as if to select part of the label
|
|
||||||
text.
|
|
||||||
gmc will fall over very soon afterwards.
|
|
||||||
(e.g. if you try to select the same icon
|
|
||||||
once or twice)
|
|
||||||
|
|
||||||
1006: Try going to 'ftp://ftp.cs.cuc.edu/' and then clicking on the
|
1006: Try going to 'ftp://ftp.cs.cuc.edu/' and then clicking on the
|
||||||
root window. I think the pointer grab stays around or
|
root window. I think the pointer grab stays around or
|
||||||
something.
|
something.
|
||||||
|
@ -1,3 +1,42 @@
|
|||||||
|
1999-08-09 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||||
|
|
||||||
|
* gscreen.c (editing_icon_list): New function to figure out
|
||||||
|
whether an icon in the icon list is being edited. This is a
|
||||||
|
FANTASTICALLY UGLY HACK, but we cannot add new functions to the
|
||||||
|
icon list at this point as it would break forwards compatibility.
|
||||||
|
Sigh. BUGFIX: GNOME bug tracker #382, #1065.
|
||||||
|
|
||||||
|
* glayout.c (gnome_panel_desktop_menu): Added some underline
|
||||||
|
accelerators.
|
||||||
|
|
||||||
|
* gdesktop.c (desktop_arrange_icons_items): Renamed to the desktop
|
||||||
|
namespace. Added underline accelerators.
|
||||||
|
(handle_arrange_icons_name): Made static.
|
||||||
|
(handle_arrange_icons_type): Likewise.
|
||||||
|
(handle_arrange_icons_size): Likewise.
|
||||||
|
(handle_arrange_icons_access): Likewise.
|
||||||
|
(handle_arrange_icons_mod): Likewise.
|
||||||
|
(handle_arrange_icons_change): Likewise.
|
||||||
|
(desktop_arrange_icons): Made static.
|
||||||
|
(strip_tearoff_menu_item): Made it return the number of items in
|
||||||
|
the menu, not the list of children.
|
||||||
|
(desktop_icon_info_destroy): Remove the icon from the icon hash
|
||||||
|
table.
|
||||||
|
(text_changed): Update the icon hash table information.
|
||||||
|
|
||||||
|
* gdesktop.h: Cleaned up some unused prototypes.
|
||||||
|
|
||||||
|
* gview.c (view_status): Use the correct g_snprintf() format
|
||||||
|
argument.
|
||||||
|
|
||||||
|
* gcmd.c (sort_get_func_from_type): Indented according to the MC
|
||||||
|
conventions. People, *PLEASE* follow the Gnome Programming
|
||||||
|
Guidelines, especially when modifying existing code.
|
||||||
|
|
||||||
|
* gdesktop.c (swap): Likewise.
|
||||||
|
(auto_pos): Likewise.
|
||||||
|
(get_icon_auto_pos): Likewise.
|
||||||
|
|
||||||
1999-08-08 Richard Hestilow <hestgray@ionet.net>
|
1999-08-08 Richard Hestilow <hestgray@ionet.net>
|
||||||
|
|
||||||
* gcmd.[ch]
|
* gcmd.[ch]
|
||||||
|
14
gnome/gcmd.c
14
gnome/gcmd.c
@ -237,31 +237,41 @@ sort_callback (GtkWidget *menu_item, GtkWidget *cbox1)
|
|||||||
gtk_widget_set_sensitive (cbox1, FALSE);
|
gtk_widget_set_sensitive (cbox1, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns a sort function based on its type */
|
||||||
sortfn *
|
sortfn *
|
||||||
sort_get_func_from_type (SortType type) {
|
sort_get_func_from_type (SortType type)
|
||||||
|
{
|
||||||
sortfn *sfn = NULL;
|
sortfn *sfn = NULL;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SORT_NAME:
|
case SORT_NAME:
|
||||||
sfn = (sortfn *) sort_name;
|
sfn = (sortfn *) sort_name;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SORT_EXTENSION:
|
case SORT_EXTENSION:
|
||||||
sfn = (sortfn *) sort_ext;
|
sfn = (sortfn *) sort_ext;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SORT_ACCESS:
|
case SORT_ACCESS:
|
||||||
sfn = (sortfn *) sort_atime;
|
sfn = (sortfn *) sort_atime;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SORT_MODIFY:
|
case SORT_MODIFY:
|
||||||
sfn = (sortfn *) sort_time;
|
sfn = (sortfn *) sort_time;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SORT_CHANGE:
|
case SORT_CHANGE:
|
||||||
sfn = (sortfn *) sort_ctime;
|
sfn = (sortfn *) sort_ctime;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SORT_SIZE:
|
case SORT_SIZE:
|
||||||
sfn = (sortfn *) sort_size;
|
sfn = (sortfn *) sort_size;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return sfn;
|
return sfn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
212
gnome/gdesktop.c
212
gnome/gdesktop.c
@ -51,8 +51,9 @@ int desktop_arr_rows = FALSE;
|
|||||||
/* The computed name of the user's desktop directory */
|
/* The computed name of the user's desktop directory */
|
||||||
char *desktop_directory;
|
char *desktop_directory;
|
||||||
|
|
||||||
/* Layout information: number of rows/columns for the layout slots, and the array of slots. Each
|
/* Layout information: number of rows/columns for the layout slots, and the
|
||||||
* slot is an integer that specifies the number of icons that belong to that slot.
|
* array of slots. Each slot is an integer that specifies the number of icons
|
||||||
|
* that belong to that slot.
|
||||||
*/
|
*/
|
||||||
static int layout_screen_width;
|
static int layout_screen_width;
|
||||||
static int layout_screen_height;
|
static int layout_screen_height;
|
||||||
@ -129,9 +130,10 @@ static int click_current_y;
|
|||||||
static int click_dragging;
|
static int click_dragging;
|
||||||
|
|
||||||
|
|
||||||
static DesktopIconInfo *desktop_icon_info_new (char *filename, char *url, char *caption, int xpos, int ypos);
|
static DesktopIconInfo *desktop_icon_info_new (char *filename, char *url, char *caption,
|
||||||
|
int xpos, int ypos);
|
||||||
|
|
||||||
static GHashTable *infos_hash;
|
static GHashTable *icon_hash;
|
||||||
|
|
||||||
|
|
||||||
/* Convenience function to figure out the slot corresponding to an (x, y) position */
|
/* Convenience function to figure out the slot corresponding to an (x, y) position */
|
||||||
@ -147,16 +149,17 @@ get_slot_from_pos (int x, int y, int *u, int *v)
|
|||||||
*v = CLAMP (vv, 0, layout_rows - 1);
|
*v = CLAMP (vv, 0, layout_rows - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void swap(int *a, int *b) {
|
/* Swaps two integer variables */
|
||||||
|
static void
|
||||||
|
swap (int *a, int *b)
|
||||||
|
{
|
||||||
int tmp;
|
int tmp;
|
||||||
|
|
||||||
g_return_if_fail(a != NULL);
|
|
||||||
g_return_if_fail(b != NULL);
|
|
||||||
|
|
||||||
tmp = *a;
|
tmp = *a;
|
||||||
*a = *b;
|
*a = *b;
|
||||||
*b = tmp;
|
*b = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Looks for a free slot in the layout_slots array and returns the coordinates
|
/* Looks for a free slot in the layout_slots array and returns the coordinates
|
||||||
* that coorespond to it. "Free" means it either has zero icons in it, or it
|
* that coorespond to it. "Free" means it either has zero icons in it, or it
|
||||||
* has the minimum number of icons of all the slots. Returns the number of
|
* has the minimum number of icons of all the slots. Returns the number of
|
||||||
@ -168,28 +171,39 @@ auto_pos (int sx, int ex, int sy, int ey, int *slot)
|
|||||||
int min, min_slot;
|
int min, min_slot;
|
||||||
int x, y;
|
int x, y;
|
||||||
int val;
|
int val;
|
||||||
int xinc = 1, yinc = 1;
|
int xinc, yinc;
|
||||||
int r, b;
|
int r, b;
|
||||||
|
|
||||||
min = l_slots (sx, sy).num_icons;
|
min = l_slots (sx, sy).num_icons;
|
||||||
min_slot = sx * layout_rows + sy;
|
min_slot = sx * layout_rows + sy;
|
||||||
|
xinc = yinc = 1;
|
||||||
|
|
||||||
if (desktop_arr_rows) {
|
if (desktop_arr_rows) {
|
||||||
swap (&ex, &ey);
|
swap (&ex, &ey);
|
||||||
swap (&sx, &sy);
|
swap (&sx, &sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (desktop_arr_r2l) swap (&sx, &ex);
|
#if 0
|
||||||
if (desktop_arr_b2t) swap (&sy, &ey);*/
|
if (desktop_arr_r2l)
|
||||||
if (desktop_arr_r2l) xinc = -1;
|
swap (&sx, &ex);
|
||||||
if (desktop_arr_b2t) yinc = -1;
|
|
||||||
|
|
||||||
if (desktop_arr_rows) swap (&xinc, &yinc);
|
if (desktop_arr_b2t)
|
||||||
|
swap (&sy, &ey);
|
||||||
|
#endif
|
||||||
|
if (desktop_arr_r2l)
|
||||||
|
xinc = -1;
|
||||||
|
|
||||||
|
if (desktop_arr_b2t)
|
||||||
|
yinc = -1;
|
||||||
|
|
||||||
|
if (desktop_arr_rows)
|
||||||
|
swap (&xinc, &yinc);
|
||||||
|
|
||||||
r = desktop_arr_r2l;
|
r = desktop_arr_r2l;
|
||||||
b = desktop_arr_b2t;
|
b = desktop_arr_b2t;
|
||||||
|
|
||||||
if (desktop_arr_rows) swap (&r, &b);
|
if (desktop_arr_rows)
|
||||||
|
swap (&r, &b);
|
||||||
|
|
||||||
for (x = sx; (r ? (x >= ex) : (x <= ex)); x += xinc) {
|
for (x = sx; (r ? (x >= ex) : (x <= ex)); x += xinc) {
|
||||||
for (y = sy; (b ? (y >= ey) : (y <= ey)); y += yinc) {
|
for (y = sy; (b ? (y >= ey) : (y <= ey)); y += yinc) {
|
||||||
@ -208,7 +222,9 @@ auto_pos (int sx, int ex, int sy, int ey, int *slot)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (val == 0) break;
|
|
||||||
|
if (val == 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*slot = min_slot;
|
*slot = min_slot;
|
||||||
@ -219,18 +235,34 @@ auto_pos (int sx, int ex, int sy, int ey, int *slot)
|
|||||||
static void
|
static void
|
||||||
get_icon_auto_pos (int *x, int *y)
|
get_icon_auto_pos (int *x, int *y)
|
||||||
{
|
{
|
||||||
int val1, val2;
|
int val1;
|
||||||
int slot1, slot2;
|
int slot1;
|
||||||
int slot;
|
int slot;
|
||||||
int sx, sy, ex, ey;
|
int sx, sy, ex, ey;
|
||||||
|
|
||||||
/* get_slot_from_pos (*x, *y, &sx, &sy);*/
|
#if 0
|
||||||
|
get_slot_from_pos (*x, *y, &sx, &sy);
|
||||||
|
#endif
|
||||||
/* FIXME funky stuff going on with the efficient positioning thingy */
|
/* FIXME funky stuff going on with the efficient positioning thingy */
|
||||||
if (desktop_arr_r2l) sx = layout_cols - 1; else sx = 0;
|
if (desktop_arr_r2l)
|
||||||
if (desktop_arr_b2t) sy = layout_rows - 1; else sy = 0;
|
sx = layout_cols - 1;
|
||||||
|
else
|
||||||
|
sx = 0;
|
||||||
|
|
||||||
if (desktop_arr_r2l) ex = 0; else ex = layout_cols - 1;
|
if (desktop_arr_b2t)
|
||||||
if (desktop_arr_b2t) ey = 0; else ey = layout_rows - 1;
|
sy = layout_rows - 1;
|
||||||
|
else
|
||||||
|
sy = 0;
|
||||||
|
|
||||||
|
if (desktop_arr_r2l)
|
||||||
|
ex = 0;
|
||||||
|
else
|
||||||
|
ex = layout_cols - 1;
|
||||||
|
|
||||||
|
if (desktop_arr_b2t)
|
||||||
|
ey = 0;
|
||||||
|
else
|
||||||
|
ey = layout_rows - 1;
|
||||||
|
|
||||||
/* Look forwards until the end of the grid. If we could not find an
|
/* Look forwards until the end of the grid. If we could not find an
|
||||||
* empty spot, find the second best.
|
* empty spot, find the second best.
|
||||||
@ -239,17 +271,27 @@ get_icon_auto_pos (int *x, int *y)
|
|||||||
val1 = auto_pos (sx, ex, sy, ey, &slot1);
|
val1 = auto_pos (sx, ex, sy, ey, &slot1);
|
||||||
|
|
||||||
slot = slot1;
|
slot = slot1;
|
||||||
/* to be used at a later date:
|
|
||||||
* if (val1 == 0)
|
#if 0
|
||||||
|
/* to be used at a later date */
|
||||||
|
if (val1 == 0)
|
||||||
slot = slot1;
|
slot = slot1;
|
||||||
else {
|
else {
|
||||||
if (desktop_arr_r2l) sx = layout_cols - 1; else sx = 0;
|
if (desktop_arr_r2l)
|
||||||
if (desktop_arr_b2t) sy = layout_rows - 1; else sy = 0;
|
sx = layout_cols - 1;
|
||||||
|
else
|
||||||
|
sx = 0;
|
||||||
|
|
||||||
|
if (desktop_arr_b2t)
|
||||||
|
sy = layout_rows - 1;
|
||||||
|
else
|
||||||
|
sy = 0;
|
||||||
|
|
||||||
val2 = auto_pos (sx, ex, sy, ey, &slot2);
|
val2 = auto_pos (sx, ex, sy, ey, &slot2);
|
||||||
if (val2 < val1)
|
if (val2 < val1)
|
||||||
slot = slot2;
|
slot = slot2;
|
||||||
}*/
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
*x = (slot / layout_rows) * DESKTOP_SNAP_X;
|
*x = (slot / layout_rows) * DESKTOP_SNAP_X;
|
||||||
*y = (slot % layout_rows) * DESKTOP_SNAP_Y;
|
*y = (slot % layout_rows) * DESKTOP_SNAP_Y;
|
||||||
@ -359,6 +401,8 @@ desktop_icon_info_destroy (DesktopIconInfo *dii)
|
|||||||
gtk_widget_destroy (dii->dicon);
|
gtk_widget_destroy (dii->dicon);
|
||||||
remove_from_slot (dii);
|
remove_from_slot (dii);
|
||||||
|
|
||||||
|
g_hash_table_remove (icon_hash, dii->filename);
|
||||||
|
|
||||||
g_free (dii->url);
|
g_free (dii->url);
|
||||||
g_free (dii->filename);
|
g_free (dii->filename);
|
||||||
g_free (dii);
|
g_free (dii);
|
||||||
@ -542,10 +586,13 @@ desktop_reload_icons (int user_pos, int xpos, int ypos)
|
|||||||
|
|
||||||
fau = g_new0 (file_and_url_t, 1);
|
fau = g_new0 (file_and_url_t, 1);
|
||||||
fau->filename = g_strdup (dirent->d_name);
|
fau->filename = g_strdup (dirent->d_name);
|
||||||
|
|
||||||
if (desktop_url)
|
if (desktop_url)
|
||||||
fau->url = g_strdup (desktop_url);
|
fau->url = g_strdup (desktop_url);
|
||||||
|
|
||||||
if (caption)
|
if (caption)
|
||||||
fau->caption = g_strdup (caption);
|
fau->caption = g_strdup (caption);
|
||||||
|
|
||||||
need_position_list = g_slist_prepend (need_position_list, fau);
|
need_position_list = g_slist_prepend (need_position_list, fau);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,11 +711,11 @@ static WPanel *create_panel_from_desktop(); /* Fwd decl */
|
|||||||
static void free_panel_from_desktop(WPanel *panel);
|
static void free_panel_from_desktop(WPanel *panel);
|
||||||
|
|
||||||
/* Perform automatic arrangement of the desktop icons */
|
/* Perform automatic arrangement of the desktop icons */
|
||||||
void
|
static void
|
||||||
desktop_arrange_icons (SortType type)
|
desktop_arrange_icons (SortType type)
|
||||||
{
|
{
|
||||||
WPanel *panel;
|
WPanel *panel;
|
||||||
sortfn *sfn = NULL;
|
sortfn *sfn;
|
||||||
DesktopIconInfo *dii;
|
DesktopIconInfo *dii;
|
||||||
int i;
|
int i;
|
||||||
dir_list dir;
|
dir_list dir;
|
||||||
@ -676,15 +723,14 @@ desktop_arrange_icons (SortType type)
|
|||||||
|
|
||||||
panel = create_panel_from_desktop ();
|
panel = create_panel_from_desktop ();
|
||||||
sfn = sort_get_func_from_type (type);
|
sfn = sort_get_func_from_type (type);
|
||||||
g_return_if_fail(sfn != NULL);
|
g_assert (sfn != NULL);
|
||||||
|
|
||||||
do_sort (&panel->dir, sfn, panel->count - 1, FALSE, FALSE);
|
do_sort (&panel->dir, sfn, panel->count - 1, FALSE, FALSE);
|
||||||
dir = panel->dir;
|
dir = panel->dir;
|
||||||
g_return_if_fail(dir.list != NULL);
|
g_assert (dir.list != NULL);
|
||||||
|
|
||||||
for (i = 0; i < dir.size; i++)
|
for (i = 0; i < dir.size; i++)
|
||||||
remove_from_slot (desktop_icon_info_get_by_filename(
|
remove_from_slot (desktop_icon_info_get_by_filename (dir.list[i].fname));
|
||||||
dir.list[i].fname));
|
|
||||||
|
|
||||||
for (i = 0; i < dir.size; i++) {
|
for (i = 0; i < dir.size; i++) {
|
||||||
dii = desktop_icon_info_get_by_filename (dir.list[i].fname);
|
dii = desktop_icon_info_get_by_filename (dir.list[i].fname);
|
||||||
@ -947,8 +993,11 @@ text_changed (GnomeIconTextItem *iti, gpointer data)
|
|||||||
|
|
||||||
/* Set the new name */
|
/* Set the new name */
|
||||||
|
|
||||||
|
g_hash_table_remove (icon_hash, dii->filename);
|
||||||
g_free (dii->filename);
|
g_free (dii->filename);
|
||||||
|
|
||||||
dii->filename = g_strdup (new_name);
|
dii->filename = g_strdup (new_name);
|
||||||
|
g_hash_table_insert (icon_hash, dii->filename, dii);
|
||||||
set_icon_wmclass (dii);
|
set_icon_wmclass (dii);
|
||||||
|
|
||||||
desktop_reload_icons (FALSE, 0, 0);
|
desktop_reload_icons (FALSE, 0, 0);
|
||||||
@ -1513,7 +1562,7 @@ desktop_icon_info_get_by_filename (char *filename)
|
|||||||
{
|
{
|
||||||
g_return_val_if_fail (filename != NULL, NULL);
|
g_return_val_if_fail (filename != NULL, NULL);
|
||||||
|
|
||||||
return g_hash_table_lookup(infos_hash, filename);
|
return g_hash_table_lookup (icon_hash, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Used to execute the popup menu for desktop icons */
|
/* Used to execute the popup menu for desktop icons */
|
||||||
@ -2136,11 +2185,10 @@ desktop_icon_info_new (char *filename, char *url, char *caption, int xpos, int y
|
|||||||
setup_icon_dnd_dest (dii);
|
setup_icon_dnd_dest (dii);
|
||||||
|
|
||||||
/* Place the icon and append it to the list */
|
/* Place the icon and append it to the list */
|
||||||
|
|
||||||
desktop_icon_info_place (dii, xpos, ypos);
|
desktop_icon_info_place (dii, xpos, ypos);
|
||||||
|
|
||||||
/* Lookup for filename */
|
/* Put into icon hash table */
|
||||||
g_hash_table_insert(infos_hash, dii->filename, dii);
|
g_hash_table_insert (icon_hash, dii->filename, dii);
|
||||||
|
|
||||||
return dii;
|
return dii;
|
||||||
}
|
}
|
||||||
@ -2473,40 +2521,43 @@ find_click_proxy_window (void)
|
|||||||
return proxy_gdk_window;
|
return proxy_gdk_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Callback for arranging the icons on the desktop */
|
/* Callback for arranging icons by name */
|
||||||
/* These are all NOT static because glayout.c calls them too */
|
static void
|
||||||
|
|
||||||
void
|
|
||||||
handle_arrange_icons_name (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_name (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_NAME);
|
desktop_arrange_icons (SORT_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* Callback for arranging icons by file type */
|
||||||
|
static void
|
||||||
handle_arrange_icons_type (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_type (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_EXTENSION);
|
desktop_arrange_icons (SORT_EXTENSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* Callback for arranging icons by file size */
|
||||||
|
static void
|
||||||
handle_arrange_icons_size (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_size (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_SIZE);
|
desktop_arrange_icons (SORT_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* Callback for arranging icons by access time */
|
||||||
|
static void
|
||||||
handle_arrange_icons_access (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_access (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_ACCESS);
|
desktop_arrange_icons (SORT_ACCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* Callback for arranging icons by modification time */
|
||||||
|
static void
|
||||||
handle_arrange_icons_mod (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_mod (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_MODIFY);
|
desktop_arrange_icons (SORT_MODIFY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* Callback for arranging icons by change time */
|
||||||
|
static void
|
||||||
handle_arrange_icons_change (GtkWidget *widget, gpointer data)
|
handle_arrange_icons_change (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
desktop_arrange_icons (SORT_CHANGE);
|
desktop_arrange_icons (SORT_CHANGE);
|
||||||
@ -2519,13 +2570,12 @@ handle_new_window (GtkWidget *widget, gpointer data)
|
|||||||
new_panel_at (gnome_user_home_dir);
|
new_panel_at (gnome_user_home_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Rescans the mountable devices in the desktop and re-creates their icons */
|
||||||
void
|
void
|
||||||
desktop_rescan_devices (void)
|
desktop_rescan_devices (void)
|
||||||
{
|
{
|
||||||
desktop_cleanup_devices ();
|
desktop_cleanup_devices ();
|
||||||
|
|
||||||
gdesktop_init ();
|
gdesktop_init ();
|
||||||
|
|
||||||
desktop_reload_icons (FALSE, 0, 0);
|
desktop_reload_icons (FALSE, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2589,17 +2639,14 @@ static GnomeUIInfo gnome_panel_new_menu [] = {
|
|||||||
GNOMEUIINFO_END
|
GNOMEUIINFO_END
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Ack. gnome_popup_menu's marshaller overrides the user_data. So
|
/* Menu items for arranging the desktop icons */
|
||||||
* instead of having a single nice function using that, we have to have
|
GnomeUIInfo desktop_arrange_icons_items[] = {
|
||||||
* many functions. That sucks. */
|
GNOMEUIINFO_ITEM_NONE (N_("By _Name"), NULL, handle_arrange_icons_name),
|
||||||
|
GNOMEUIINFO_ITEM_NONE (N_("By File _Type"), NULL, handle_arrange_icons_type),
|
||||||
GnomeUIInfo arrange_icons_items[] = {
|
GNOMEUIINFO_ITEM_NONE (N_("By _Size"), NULL, handle_arrange_icons_size),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By Name"), NULL, handle_arrange_icons_name),
|
GNOMEUIINFO_ITEM_NONE (N_("By Time Last _Accessed"), NULL, handle_arrange_icons_access),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By File Type"), NULL, handle_arrange_icons_type),
|
GNOMEUIINFO_ITEM_NONE (N_("By Time Last _Modified"), NULL, handle_arrange_icons_mod),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By Size"), NULL, handle_arrange_icons_size),
|
GNOMEUIINFO_ITEM_NONE (N_("By Time Last _Changed"), NULL, handle_arrange_icons_change),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By Time Last Accessed"), NULL, handle_arrange_icons_access),
|
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By Time Last Modified"), NULL, handle_arrange_icons_mod),
|
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("By Time Last Changed"), NULL, handle_arrange_icons_change),
|
|
||||||
GNOMEUIINFO_END
|
GNOMEUIINFO_END
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2607,25 +2654,37 @@ GnomeUIInfo arrange_icons_items[] = {
|
|||||||
GnomeUIInfo desktop_popup_items[] = {
|
GnomeUIInfo desktop_popup_items[] = {
|
||||||
GNOMEUIINFO_MENU_NEW_SUBTREE (gnome_panel_new_menu),
|
GNOMEUIINFO_MENU_NEW_SUBTREE (gnome_panel_new_menu),
|
||||||
GNOMEUIINFO_SEPARATOR,
|
GNOMEUIINFO_SEPARATOR,
|
||||||
GNOMEUIINFO_SUBTREE(N_("Arrange Icons..."), arrange_icons_items),
|
GNOMEUIINFO_SUBTREE (N_("_Arrange Icons"), desktop_arrange_icons_items),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Create New Window"), NULL, handle_new_window),
|
GNOMEUIINFO_ITEM_NONE (N_("Create _New Window"), NULL, handle_new_window),
|
||||||
GNOMEUIINFO_SEPARATOR,
|
GNOMEUIINFO_SEPARATOR,
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Recreate Desktop Shortcuts"), NULL, handle_rescan_devices),
|
GNOMEUIINFO_ITEM_NONE (N_("Recreate Desktop _Shortcuts"), NULL, handle_rescan_devices),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Rescan Desktop"), NULL, handle_rescan_desktop),
|
GNOMEUIINFO_ITEM_NONE (N_("Rescan _Desktop"), NULL, handle_rescan_desktop),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Configure Background Image"), NULL, set_background_image),
|
GNOMEUIINFO_ITEM_NONE (N_("Configure _Background Image"), NULL, set_background_image),
|
||||||
GNOMEUIINFO_END
|
GNOMEUIINFO_END
|
||||||
};
|
};
|
||||||
|
|
||||||
static GList* strip_tearoff_menu(GnomeUIInfo *infos) {
|
static int
|
||||||
|
strip_tearoff_menu_item (GnomeUIInfo *infos)
|
||||||
|
{
|
||||||
GtkWidget *shell;
|
GtkWidget *shell;
|
||||||
GList *child_list;
|
GList *child_list;
|
||||||
g_return_if_fail(infos != NULL);
|
int n;
|
||||||
|
|
||||||
|
g_assert (infos != NULL);
|
||||||
|
|
||||||
shell = infos[0].widget->parent;
|
shell = infos[0].widget->parent;
|
||||||
child_list = gtk_container_children (GTK_CONTAINER (shell));
|
child_list = gtk_container_children (GTK_CONTAINER (shell));
|
||||||
if (GTK_IS_TEAROFF_MENU_ITEM (child_list->data))
|
n = g_list_length (child_list);
|
||||||
|
|
||||||
|
if (child_list && GTK_IS_TEAROFF_MENU_ITEM (child_list->data)) {
|
||||||
|
n--;
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (child_list->data));
|
||||||
|
#if 0
|
||||||
gtk_widget_hide (GTK_WIDGET (child_list->data));
|
gtk_widget_hide (GTK_WIDGET (child_list->data));
|
||||||
return child_list;
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Executes the popup menu for the desktop */
|
/* Executes the popup menu for the desktop */
|
||||||
@ -2634,18 +2693,17 @@ desktop_popup (GdkEventButton *event)
|
|||||||
{
|
{
|
||||||
GtkWidget *shell;
|
GtkWidget *shell;
|
||||||
GtkWidget *popup;
|
GtkWidget *popup;
|
||||||
GList *child_list;
|
|
||||||
gchar *file, *file2;
|
gchar *file, *file2;
|
||||||
WPanel *panel;
|
WPanel *panel;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
|
/* Create the menu and then strip the tearoff menu items, sigh... */
|
||||||
|
|
||||||
popup = gnome_popup_menu_new (desktop_popup_items);
|
popup = gnome_popup_menu_new (desktop_popup_items);
|
||||||
/* First thing we want to do is strip off the STUPID tear off menu... S-: */
|
|
||||||
strip_tearoff_menu(arrange_icons_items);
|
strip_tearoff_menu_item (desktop_arrange_icons_items);
|
||||||
child_list = strip_tearoff_menu(gnome_panel_new_menu);
|
i = strip_tearoff_menu_item (gnome_panel_new_menu);
|
||||||
shell = gnome_panel_new_menu[0].widget->parent;
|
shell = gnome_panel_new_menu[0].widget->parent;
|
||||||
i = g_list_length (child_list);
|
|
||||||
g_list_free (child_list);
|
|
||||||
file = gnome_unconditional_datadir_file ("mc/templates");
|
file = gnome_unconditional_datadir_file ("mc/templates");
|
||||||
i = create_new_menu_from (file, shell, i);
|
i = create_new_menu_from (file, shell, i);
|
||||||
file2 = gnome_datadir_file ("mc/templates");
|
file2 = gnome_datadir_file ("mc/templates");
|
||||||
@ -3091,7 +3149,7 @@ setup_desktop_clicks (void)
|
|||||||
void
|
void
|
||||||
desktop_init (void)
|
desktop_init (void)
|
||||||
{
|
{
|
||||||
infos_hash = g_hash_table_new(g_str_hash, g_str_equal);
|
icon_hash = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
|
||||||
gdnd_init ();
|
gdnd_init ();
|
||||||
gicon_init ();
|
gicon_init ();
|
||||||
@ -3139,7 +3197,7 @@ desktop_destroy (void)
|
|||||||
gtk_widget_destroy (proxy_invisible);
|
gtk_widget_destroy (proxy_invisible);
|
||||||
XDeleteProperty (GDK_DISPLAY (), GDK_ROOT_WINDOW (), gdk_atom_intern ("XdndProxy", FALSE));
|
XDeleteProperty (GDK_DISPLAY (), GDK_ROOT_WINDOW (), gdk_atom_intern ("XdndProxy", FALSE));
|
||||||
|
|
||||||
g_hash_table_destroy(infos_hash);
|
g_hash_table_destroy (icon_hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#define GDESKTOP_H
|
#define GDESKTOP_H
|
||||||
|
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "gcmd.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* Snap granularity for desktop icons -- maybe these should be calculated in
|
/* Snap granularity for desktop icons -- maybe these should be calculated in
|
||||||
@ -33,7 +32,8 @@ extern int desktop_arr_b2t; /* Arrange from bottom to top */
|
|||||||
extern int desktop_arr_rows; /* Arrange in rows instead of columns */
|
extern int desktop_arr_rows; /* Arrange in rows instead of columns */
|
||||||
extern char *desktop_directory;
|
extern char *desktop_directory;
|
||||||
|
|
||||||
extern GnomeUIInfo arrange_icons_items[];
|
/* Menu items for arranging the desktop icons */
|
||||||
|
extern GnomeUIInfo desktop_arrange_icons_items[];
|
||||||
|
|
||||||
/* Initializes the desktop -- init DnD, load the default desktop icons, etc. */
|
/* Initializes the desktop -- init DnD, load the default desktop icons, etc. */
|
||||||
void desktop_init (void);
|
void desktop_init (void);
|
||||||
@ -69,10 +69,6 @@ gboolean is_ejectable (char *filename);
|
|||||||
gboolean do_mount_umount (char *filename, gboolean is_mount);
|
gboolean do_mount_umount (char *filename, gboolean is_mount);
|
||||||
gboolean do_eject (char *filename);
|
gboolean do_eject (char *filename);
|
||||||
|
|
||||||
void handle_arrange_icons(GtkWidget *widget, gpointer data);
|
|
||||||
/* Used from two places so no longer static ^^ */
|
|
||||||
void desktop_arrange_icons (SortType type);
|
|
||||||
|
|
||||||
void desktop_rescan_devices (void);
|
void desktop_rescan_devices (void);
|
||||||
void desktop_reload_icons (int user_pos, int xpos, int ypos);
|
void desktop_reload_icons (int user_pos, int xpos, int ypos);
|
||||||
void desktop_create_url (const char *filename, const char *title, const char *url, const char *icon);
|
void desktop_create_url (const char *filename, const char *title, const char *url, const char *icon);
|
||||||
|
@ -451,10 +451,10 @@ GnomeUIInfo gnome_panel_about_menu [] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
GnomeUIInfo gnome_panel_desktop_menu [] = {
|
GnomeUIInfo gnome_panel_desktop_menu [] = {
|
||||||
GNOMEUIINFO_SUBTREE(N_("Arrange Icons..."), arrange_icons_items),
|
GNOMEUIINFO_SUBTREE(N_("_Arrange Icons"), desktop_arrange_icons_items),
|
||||||
GNOMEUIINFO_SEPARATOR,
|
GNOMEUIINFO_SEPARATOR,
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Rescan System Devices"), NULL, desktop_rescan_devices),
|
GNOMEUIINFO_ITEM_NONE (N_("Recreate Desktop _Shortcuts"), NULL, desktop_rescan_devices),
|
||||||
GNOMEUIINFO_ITEM_NONE (N_("Rescan Desktop"), NULL, do_desktop_rescan_devices),
|
GNOMEUIINFO_ITEM_NONE (N_("Rescan _Desktop"), NULL, do_desktop_rescan_devices),
|
||||||
GNOMEUIINFO_END
|
GNOMEUIINFO_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1467,6 +1467,21 @@ file_list_popup (GdkEventButton *event, WPanel *panel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Returns whether an icon in the icon list is being edited. FIXME: This
|
||||||
|
* function uses a fantastically ugly hack to figure this out. It would be
|
||||||
|
* saner to have a function provided by the icon list widget to do it, but we
|
||||||
|
* can't break forwards compatibility at this point. It would be even saner to
|
||||||
|
* have a good DnD API for the icon list.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
editing_icon_list (GnomeIconList *gil)
|
||||||
|
{
|
||||||
|
GnomeCanvasItem *item;
|
||||||
|
|
||||||
|
item = GNOME_CANVAS (gil)->focused_item;
|
||||||
|
return (item && GNOME_IS_ICON_TEXT_ITEM (item) && GNOME_ICON_TEXT_ITEM (item)->editing);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Strategy for activaing the drags from the icon-list:
|
* Strategy for activaing the drags from the icon-list:
|
||||||
*
|
*
|
||||||
@ -1482,6 +1497,9 @@ panel_icon_list_button_press (GtkWidget *widget, GdkEventButton *event, WPanel *
|
|||||||
GnomeIconList *gil = GNOME_ICON_LIST (widget);
|
GnomeIconList *gil = GNOME_ICON_LIST (widget);
|
||||||
int icon;
|
int icon;
|
||||||
|
|
||||||
|
if (editing_icon_list (gil))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (event->type != GDK_BUTTON_PRESS)
|
if (event->type != GDK_BUTTON_PRESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ view_status (WView *view, gboolean update_gui)
|
|||||||
char buffer [80];
|
char buffer [80];
|
||||||
|
|
||||||
if (view->hex_mode)
|
if (view->hex_mode)
|
||||||
g_snprintf (buffer, sizeof (buffer), _("Offset 0x%08x"), view->edit_cursor);
|
g_snprintf (buffer, sizeof (buffer), _("Offset 0x%08lx"), view->edit_cursor);
|
||||||
else
|
else
|
||||||
g_snprintf (buffer, sizeof (buffer), _("Col %d"), -view->start_col);
|
g_snprintf (buffer, sizeof (buffer), _("Col %d"), -view->start_col);
|
||||||
if (strcmp (buffer, GTK_LABEL (view->gtk_offset)->label))
|
if (strcmp (buffer, GTK_LABEL (view->gtk_offset)->label))
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
1999-08-09 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||||
|
|
||||||
|
* ext.c: Added missing include file.
|
||||||
|
|
||||||
1999-08-08 David Martin <dmartina@usa.net>
|
1999-08-08 David Martin <dmartina@usa.net>
|
||||||
|
|
||||||
* menu.c: (create_menu): Adjust "#ifdef ENABLE_NLS" so that menus
|
* menu.c: (create_menu): Adjust "#ifdef ENABLE_NLS" so that menus
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
#ifdef SCO_FLAVOR
|
#ifdef SCO_FLAVOR
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif /* SCO_FLAVOR */
|
#endif /* SCO_FLAVOR */
|
||||||
|
#ifdef HAVE_GNOME
|
||||||
|
#include "gcmd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If set, we execute the file command to check the file type */
|
/* If set, we execute the file command to check the file type */
|
||||||
int use_file_to_check_type = 1;
|
int use_file_to_check_type = 1;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user