From c6d65c1bd318f62ab321fb6d0e147a55a4d89177 Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Tue, 10 Mar 1998 06:31:01 +0000 Subject: [PATCH] Add a couple of icons for devices and symlinks --- gnome/ChangeLog | 19 +++++++++++++ gnome/Makefile.in | 4 +-- gnome/gconf.h | 3 ++ gnome/gdesktop.c | 18 ++++++------ gnome/gmain.c | 7 +---- gnome/gscreen.c | 70 +++++++++++++++++++++++++++++++---------------- gnome/gtools.c | 2 ++ gnome/gwidget.c | 30 ++++++++++++++++++-- gnome/layout | 4 +-- 9 files changed, 113 insertions(+), 44 deletions(-) diff --git a/gnome/ChangeLog b/gnome/ChangeLog index d38ea7472..976e487ec 100644 --- a/gnome/ChangeLog +++ b/gnome/ChangeLog @@ -1,3 +1,22 @@ +Tue Mar 10 00:10:32 1998 Miguel de Icaza + + * gscreen.c (panel_drop_data_available): Now drop support uses the + new coords.x and coords.y fields from the DropDataAvailableEvent + to find out which directory receives the drop. + + * gwidget.c (x_radio_focus_item): Add support for focusing radio + buttons. + +Mon Mar 9 15:12:00 1998 Miguel de Icaza + + * gtools.c (translate_gdk_keysym_to_curses), dlg.c + (dlg_key_event): Support for backtab. + + * gwidget.c: highlight properly the focused radio entry. + + * gmain.c (x_init_dlg): After setting up the X widget, set the + Gtk focus to h->current; + 1998-03-09 Federico Mena Quintero * gscreen.c (x_panel_select_item): Set the colors of the row. diff --git a/gnome/Makefile.in b/gnome/Makefile.in index 415a165dd..1bbd4484b 100644 --- a/gnome/Makefile.in +++ b/gnome/Makefile.in @@ -8,7 +8,7 @@ CFLAGS = $(XCFLAGS) @X_CFLAGS@ CPPFLAGS = $(XCPPFLAGS) -I$(vfsdir) -I$(slangdir) -DHAVE_X -DHAVE_GNOME LDFLAGS = $(XLDFLAGS) @X_LIBS@ DEFS = $(XDEFS) -LIBS = -lgnomeui -lgnome -lgtk -lgdk -lglib @X_EXTRA_LIBS@ -lX11 @X_PRE_LIBS@ $(XLIBS) $(XLIB) @TERMNET@ +LIBS = -lgnomeui -lgdk_imlib -lgnome -lgnomesupport -lgtk -lgdk -lglib @X_EXTRA_LIBS@ -lX11 @X_PRE_LIBS@ $(XLIBS) $(XLIB) @TERMNET@ EXTRALIBS = @LVFS@ @LSLANG@ @LEDIT@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -58,7 +58,7 @@ OBJS = $(LOBJS) $(OOBJS) \ # Distribution variables # -PIXMAPS = directory.xpm +PIXMAPS = directory.xpm link.xpm DISTGNOME = Makefile.in gnome.TODO layout $(PIXMAPS) $(GNOMESRCS) $(GNOMEHDRS) diff --git a/gnome/gconf.h b/gnome/gconf.h index c95eb3b46..346c4989e 100644 --- a/gnome/gconf.h +++ b/gnome/gconf.h @@ -17,6 +17,9 @@ #define PORT_HAS_PANEL_RESET_SORT_LABELS 1 #define PORT_HAS_FLUSH_EVENTS 1 #define PORT_HAS_SET_IDLE 1 +#define PORT_HAS_BACKTAB_CHAR 1 +#define PORT_NOT_FOCUS_SELECT_ITEM 1 +#define PORT_NOT_UNFOCUS_UNSELECT_ITEM 1 #define mi_getch() fprintf (stderr, "mi_getch is not implemented in this port\n") #define frontend_run_dlg(x) gtkrundlg_event (x) diff --git a/gnome/gdesktop.c b/gnome/gdesktop.c index 185e3ad00..76f3b889c 100644 --- a/gnome/gdesktop.c +++ b/gnome/gdesktop.c @@ -271,11 +271,10 @@ drop_on_panel (GdkEventDropDataAvailable *event, char *dest) int x, y; int operation; - gdk_window_get_pointer (NULL, &x, &y, NULL); - operation = get_operation (x, y); + operation = get_operation (event->coords.x, event->coords.y); source_panel = find_panel_owning_window_id (event->requestor); - + if (source_panel) perform_drop_on_panel (source_panel, operation, dest); else @@ -569,13 +568,14 @@ desktop_setup_default (char *desktop_dir) char *mc_desktop_dir; mc_desktop_dir = concat_dir_and_file (mc_home, MC_LIB_DESKTOP); - - create_op_win (OP_COPY, 0); - file_mask_defaults (); - copy_dir_dir (mc_desktop_dir, desktop_dir); - destroy_op_win (); - free (mc_desktop_dir); + if (exist_file (mc_desktop_dir)){ + create_op_win (OP_COPY, 0); + file_mask_defaults (); + copy_dir_dir (mc_desktop_dir, desktop_dir); + destroy_op_win (); + } + free (mc_desktop_dir); } void diff --git a/gnome/gmain.c b/gnome/gmain.c index 4fe13ce71..8b6359c10 100644 --- a/gnome/gmain.c +++ b/gnome/gmain.c @@ -183,12 +183,6 @@ x_panel_container_show (widget_data wdata) gtk_widget_show (GTK_WIDGET (wdata)); } -void -x_focus_widget (Widget_Item *p) -{ - gtk_widget_grab_focus (GTK_WIDGET (p->widget->wdata)); -} - void x_add_widget (Dlg_head *h, Widget_Item *w) { @@ -218,6 +212,7 @@ x_init_dlg (Dlg_head *h) gtk_widget_show (GTK_WIDGET (h->wdata)); } + x_focus_widget (h->current); } diff --git a/gnome/gscreen.c b/gnome/gscreen.c index bc57f3e80..e56ba4052 100644 --- a/gnome/gscreen.c +++ b/gnome/gscreen.c @@ -30,13 +30,19 @@ #include "dialog.h" #include "gdesktop.h" +/* The pixmaps */ #include "directory.xpm" - +#include "link.xpm" +#include "dev.xpm" /* This is used to initialize our pixmaps */ static int pixmaps_ready; -GdkPixmap *directory_pixmap; -GdkBitmap *directory_mask; +GdkPixmap *icon_directory_pixmap; +GdkBitmap *icon_directory_mask; +GdkPixmap *icon_link_pixmap; +GdkBitmap *icon_link_mask; +GdkPixmap *icon_dev_pixmap; +GdkBitmap *icon_dev_mask; static char *drag_types [] = { "text/plain", "url:ALL" }; static char *drop_types [] = { "url:ALL" }; @@ -58,8 +64,6 @@ show_dir (WPanel *panel) list = g_list_alloc (); g_list_append (list, panel->cwd); - - printf ("show_dir to %s %s\n", panel->cwd, panel->filter ? panel->filter : ""); } static void @@ -68,7 +72,13 @@ panel_file_list_set_type_bitmap (GtkCList *cl, int row, int column, int color, f /* Here, add more icons */ switch (color){ case DIRECTORY_COLOR: - gtk_clist_set_pixmap (cl, row, column, directory_pixmap, directory_mask); + gtk_clist_set_pixmap (cl, row, column, icon_directory_pixmap, icon_directory_mask); + break; + case LINK_COLOR: + gtk_clist_set_pixmap (cl, row, column, icon_link_pixmap, icon_link_mask); + break; + case DEVICE_COLOR: + gtk_clist_set_pixmap (cl, row, column, icon_dev_pixmap, icon_dev_mask); break; } } @@ -444,8 +454,6 @@ internal_select_item (GtkWidget *file_list, WPanel *panel, int row) static void panel_file_list_select_row (GtkWidget *file_list, int row, int column, GdkEvent *event, WPanel *panel) { - printf ("panel_file_list_select_row\n"); - if (!event) { internal_select_item (file_list, panel, row); return; @@ -500,8 +508,6 @@ panel_file_list_compute_lines (GtkCList *file_list, WPanel *panel, int height) static void panel_file_list_size_allocate_hook (GtkWidget *file_list, GtkAllocation *allocation, WPanel *panel) { - printf ("Aqui\n"); - panel_file_list_configure_contents (file_list, panel, allocation->width, allocation->height); panel_file_list_compute_lines (GTK_CLIST (file_list), panel, allocation->height); @@ -540,14 +546,16 @@ panel_create_pixmaps (GtkWidget *parent) GdkColor color = gtk_widget_get_style (parent)->bg [GTK_STATE_NORMAL]; pixmaps_ready = 1; - directory_pixmap = gdk_pixmap_create_from_xpm_d (parent->window, &directory_mask, &color, directory_xpm); + icon_directory_pixmap = gdk_pixmap_create_from_xpm_d (parent->window, &icon_directory_mask, &color, directory_xpm); + icon_link_pixmap = gdk_pixmap_create_from_xpm_d (parent->window, &icon_link_mask, &color, link_xpm); + icon_dev_pixmap = gdk_pixmap_create_from_xpm_d (parent->window, &icon_dev_mask, &color, dev_xpm); } static void panel_file_list_scrolled (GtkAdjustment *adj, WPanel *panel) { if (!GTK_IS_ADJUSTMENT (adj)) { - fprintf (stderr, "CRAP!\n"); + fprintf (stderr, "file_list_is_scrolled is called and there are not enough boats!\n"); exit (1); } } @@ -656,15 +664,32 @@ panel_drop_enter (GtkWidget *widget, GdkEvent *event) static void panel_drop_data_available (GtkWidget *widget, GdkEventDropDataAvailable *data, WPanel *panel) { - /* Sigh, the DropDataAvailable does not provide the location where the drag - * happened, so for now, the only thing we can do is ask gdk to tell us - * where the pointer is, even if it bears little resemblance with the - * actual spot where the drop happened. - * - * FIXME: gtk+ needs fixing here. - */ + gint winx, winy; + gint dropx, dropy; + gint row; + char *drop_dir; + + gdk_window_get_origin (GTK_CLIST (widget)->clist_window, &winx, &winy); + dropx = data->coords.x - winx; + dropy = data->coords.y - winy; - drop_on_panel (data, panel->cwd); + if (dropx < 0 || dropy < 0) + return; + + if (gtk_clist_get_selection_info (GTK_CLIST (widget), dropx, dropy, &row, NULL) == 0) + drop_dir = panel->cwd; + else { + g_assert (row < panel->count); + + if (S_ISDIR (panel->dir.list [row].buf.st_mode)) + drop_dir = concat_dir_and_file (panel->cwd, panel->dir.list [row].fname); + else + drop_dir = panel->cwd; + } + drop_on_panel (data, drop_dir); + + if (drop_dir != panel->cwd) + free (drop_dir); } /* Workaround for the CList that is not adding its clist-window to the DND windows */ @@ -737,6 +762,7 @@ panel_create_file_list (WPanel *panel) const int items = panel->format->items; format_e *format = panel->format; GtkWidget *file_list; + GtkCList *clist; gchar **titles; int i; @@ -746,6 +772,7 @@ panel_create_file_list (WPanel *panel) titles [i++] = format->title; file_list = gtk_clist_new_with_titles (items, titles); + clist = GTK_CLIST (file_list); panel_configure_file_list (panel, file_list); free (titles); @@ -760,7 +787,6 @@ panel_create_file_list (WPanel *panel) gtk_signal_connect (GTK_OBJECT (file_list), "select_row", GTK_SIGNAL_FUNC (panel_file_list_select_row), panel); - return file_list; } @@ -804,8 +830,6 @@ panel_change_filter (GtkWidget *entry, WPanel *panel) * item to bring up a "set filter" dialog box. */ - printf ("panel_change_filter\n"); - reg_exp = gtk_entry_get_text (GTK_ENTRY (entry)); if (panel->filter) { diff --git a/gnome/gtools.c b/gnome/gtools.c index def6d8de6..fdc7a6789 100644 --- a/gnome/gtools.c +++ b/gnome/gtools.c @@ -125,6 +125,8 @@ translate_gdk_keysym_to_curses (GdkEventKey *event) case GDK_BackSpace: return KEY_BACKSPACE; case GDK_Tab: + if (event->state & GDK_SHIFT_MASK) + return KEY_BACKTAB; return '\t'; case GDK_KP_Enter: case GDK_Return: diff --git a/gnome/gwidget.c b/gnome/gwidget.c index 994c86ea0..97e71dc31 100644 --- a/gnome/gwidget.c +++ b/gnome/gwidget.c @@ -16,6 +16,14 @@ #include "gwidget.h" #include "dlg.h" +void +x_focus_widget (Widget_Item *p) +{ + GtkWidget *w = GTK_WIDGET (p->widget->wdata); + + gtk_widget_grab_focus (GTK_WIDGET (p->widget->wdata)); +} + void x_destroy_cmd (void *w) { @@ -55,7 +63,7 @@ x_create_button (Dlg_head *h, widget_data parent, WButton *b) tag = gtk_signal_connect (GTK_OBJECT(button), "clicked", (GtkSignalFunc) gbutton_callback, b); gtk_object_set_data (GTK_OBJECT (button), "click-signal-tag", (void *) tag); b->widget.wdata = (widget_data) button; - + return 1; } @@ -76,6 +84,24 @@ x_button_set (WButton *b, char *text) } /* Radio buttons */ + +void +x_radio_focus_item (WRadio *radio) +{ + GList *children = GTK_BOX (radio->widget.wdata)->children; + int i; + + for (i = 0; i < radio->count; i++){ + if (i == radio->pos){ + GtkBoxChild *bc = (GtkBoxChild *) children->data; + + gtk_widget_grab_focus (GTK_WIDGET (bc->widget)); + break; + } + children = children->next; + } +} + static void radio_toggle (GtkObject *object, WRadio *r) { @@ -110,7 +136,7 @@ x_create_radio (Dlg_head *h, widget_data parent, WRadio *r) gtk_box_pack_start_defaults (GTK_BOX (vbox), w); } gtk_widget_show_all (vbox); - + r->widget.wdata = (widget_data) vbox; return 1; } diff --git a/gnome/layout b/gnome/layout index 69537a35b..b5ddd0b19 100644 --- a/gnome/layout +++ b/gnome/layout @@ -136,7 +136,7 @@ flags=snew text=Directory path [option-Widget-button-ok] -geometry=1,15,1,1 +geometry=2,15,1,1 flags=w [option-Widget-safe-del] @@ -220,7 +220,7 @@ geometry=2,2,1,1 flags=w [option-Widget-pause-radio] -geometry=2,12,1,5 +geometry=2,10,1,5 flags=nw [option-Frame-Frame-1]