[maemo-commits] [maemo-commits] r11522 - in projects/haf/trunk/hildon-desktop: . libhildondesktop libhildonwm src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue May 8 18:43:17 EEST 2007
- Previous message: [maemo-commits] r11521 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Next message: [maemo-commits] r11523 - projects/haf/trunk/dosfstools/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: moimart Date: 2007-05-08 18:43:16 +0300 (Tue, 08 May 2007) New Revision: 11522 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c Log: * src/hd-switcher-menu.c: - Fixed menu positioning. - Implemented key navigation. - Added separators to notifications. * libhildondesktop/hildon-desktop-popup-menu.c: - Implemented navigation through keys. Misses auto-scrolling. - Small fixes * libhildondesktop/hildon-desktop-popup-window.c: - Propagate key-press-event to child widget of pane. * libhildonwm/hd-wm-watched-window.c: - Update state of fullscreen when a HDWMWatchedWindow is removed. Fixes: NB#56174, NB#54820. * libhildonwm/hd-wm.c: - Renamed "show_menu" signal to "show-menu". * ChangeLog updated. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-08 15:43:16 UTC (rev 11522) @@ -1,3 +1,20 @@ +2007-05-08 Moises Martinez <moises.martinez at nokia.com> + + * src/hd-switcher-menu.c: + - Fixed menu positioning. + - Implemented key navigation. + - Added separators to notifications. + * libhildondesktop/hildon-desktop-popup-menu.c: + - Implemented navigation through keys. Misses auto-scrolling. + - Small fixes + * libhildondesktop/hildon-desktop-popup-window.c: + - Propagate key-press-event to child widget of pane. + * libhildonwm/hd-wm-watched-window.c: + - Update state of fullscreen when a HDWMWatchedWindow is removed. + Fixes: NB#56174, NB#54820. + * libhildonwm/hd-wm.c: + - Renamed "show_menu" signal to "show-menu". + 2007-05-08 Johan Bilien <johan.bilien at nokia.com> * libhildondesktop/hildon-desktop-home-item.c: Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-05-08 15:43:16 UTC (rev 11522) @@ -32,8 +32,8 @@ #include <gtk/gtkbutton.h> #include <gtk/gtkwindow.h> #include <gdk/gdk.h> +#include <gdk/gdkkeysyms.h> - #define HILDON_DESKTOP_POPUP_MENU_GET_PRIVATE(object) \ (G_TYPE_INSTANCE_GET_PRIVATE ((object), HILDON_DESKTOP_TYPE_POPUP_MENU, HildonDesktopPopupMenuPrivate)) @@ -89,7 +89,7 @@ static gboolean hildon_desktop_popup_menu_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gboolean hildon_desktop_popup_menu_release_event (GtkWidget *widget, GdkEventButton *event); - +static gboolean hildon_desktop_popup_menu_key_press_event (GtkWidget *widget, GdkEventKey *event); static void hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu); static void @@ -119,7 +119,8 @@ widget_class->motion_notify_event = hildon_desktop_popup_menu_motion_notify; widget_class->button_release_event = hildon_desktop_popup_menu_release_event; - + widget_class->key_press_event = hildon_desktop_popup_menu_key_press_event; + g_type_class_add_private (object_class, sizeof (HildonDesktopPopupMenuPrivate)); signals[SIGNAL_POPUP_RESIZE] = @@ -284,7 +285,10 @@ h = GTK_WIDGET (l->data)->allocation.height; if ((x >= 0) && (x <= w) && (y >= 0) && (y <= h)) + { gtk_item_select (GTK_ITEM (l->data)); + menu->priv->selected_item = GTK_MENU_ITEM (l->data); + } } g_list_free (menu_items); @@ -347,6 +351,77 @@ return TRUE; } +static gboolean +hildon_desktop_popup_menu_key_press_event (GtkWidget *widget, + GdkEventKey *event) +{ + HildonDesktopPopupMenu *menu = HILDON_DESKTOP_POPUP_MENU (widget); + GList *menu_items = NULL, *l; + + menu_items = + gtk_container_get_children (GTK_CONTAINER (menu->priv->box_items)); + + for (l = menu_items; l != NULL; l = g_list_next (l)) + { + if (l->data == menu->priv->selected_item) + break; + } + + g_debug ("key press event %p",l); + + if (l == NULL) + return FALSE; + + if (event->keyval == GDK_Up || + event->keyval == GDK_KP_Up) + { + GList *item = l->prev; + + while (item) + { + if (GTK_IS_MENU_ITEM (item->data) && !GTK_IS_SEPARATOR_MENU_ITEM (item->data)) + { + gtk_item_deselect (GTK_ITEM (l->data)); + gtk_item_select (GTK_ITEM (item->data)); + menu->priv->selected_item = GTK_MENU_ITEM (item->data); + break; + } + + item = g_list_previous (item); + } + return TRUE; + } + else + if (event->keyval == GDK_Down || + event->keyval == GDK_KP_Down) + { + GList *item = l->next; + + while (item) + { + if (GTK_IS_MENU_ITEM (item->data) && !GTK_IS_SEPARATOR_MENU_ITEM (item->data)) + { + gtk_item_deselect (GTK_ITEM (l->data)); + gtk_item_select (GTK_ITEM (item->data)); + menu->priv->selected_item = GTK_MENU_ITEM (item->data); + break; + } + + item = g_list_next (item); + } + return TRUE; + } + else + if (event->keyval == GDK_KP_Enter || + event->keyval == GDK_ISO_Enter) + { + if (menu->priv->selected_item) + gtk_menu_item_activate (menu->priv->selected_item); + } + + return FALSE; +} + static void hildon_desktop_popup_menu_show_controls (HildonDesktopPopupMenu *menu) { @@ -520,8 +595,9 @@ { gtk_item_select (GTK_ITEM (item)); menu->priv->selected_item = item; - break; } + else + gtk_item_deselect (GTK_ITEM (item)); } g_list_free (children); Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-window.c 2007-05-08 15:43:16 UTC (rev 11522) @@ -122,6 +122,28 @@ popup->priv->attached_widget = NULL; } +static gboolean +hildon_desktop_popup_window_key_press_event (GtkWidget *widget, GdkEventKey *event) +{ + if (GTK_BIN (widget)->child) + return gtk_widget_event (GTK_BIN (widget)->child,(GdkEvent *)event); + + return + GTK_WIDGET_CLASS + (hildon_desktop_popup_window_parent_class)->key_press_event (widget, event); +} + +static gboolean +hildon_desktop_popup_window_key_press_event_cb (GtkWidget *widget, + GdkEventKey *event, + HildonDesktopPopupWindow *popup) +{ + if (GTK_BIN (widget)->child) + return gtk_widget_event (GTK_BIN (widget)->child,(GdkEvent *)event); + + return FALSE; +} + static void hildon_desktop_popup_window_class_init (HildonDesktopPopupWindowClass *popup_class) { @@ -136,7 +158,7 @@ widget_class->motion_notify_event = hildon_desktop_popup_window_motion_notify; widget_class->leave_notify_event = hildon_desktop_popup_window_leave_notify; widget_class->button_release_event = hildon_desktop_popup_window_button_release_event; - + widget_class->key_press_event = hildon_desktop_popup_window_key_press_event; widget_class->realize = hildon_desktop_popup_window_realize; widget_class->unrealize = hildon_desktop_popup_window_unrealize; @@ -247,6 +269,11 @@ G_CALLBACK (hildon_desktop_popup_window_composited_leave_notify), (gpointer)popup); + g_signal_connect (popup->priv->extra_panes[i], + "key-press-event", + G_CALLBACK (hildon_desktop_popup_window_key_press_event_cb), + (gpointer)popup); + /*FIXME: NO FOCUS FOR ANY WINDOW!!!!!!!!!!!!!!!!!! */ } Modified: projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm-watched-window.c 2007-05-08 15:43:16 UTC (rev 11522) @@ -815,6 +815,8 @@ if(win->gdk_wrapper_win) g_object_unref (win->gdk_wrapper_win); + g_signal_emit_by_name (hdwm, "fullscreen", hd_wm_fullscreen_mode ()); + g_free(win); } Modified: projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/libhildonwm/hd-wm.c 2007-05-08 15:43:16 UTC (rev 11522) @@ -766,14 +766,14 @@ if (!member || member[0] == '\0') return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - if (strcmp (HOME_LONG_PRESS, member) == 0 && !hd_wm_modal_windows_present()) + if (g_str_equal (HOME_LONG_PRESS, member) && !hd_wm_modal_windows_present()) { g_signal_emit_by_name (hdwm, "long-key-press"); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } - if (strcmp (HOME_PRESS, member) == 0 && !hd_wm_modal_windows_present()) + if (g_str_equal (HOME_PRESS, member) && !hd_wm_modal_windows_present()) { hd_wm_activate (HD_TN_ACTIVATE_MAIN_MENU); @@ -976,7 +976,7 @@ G_TYPE_POINTER); hdwm_signals[HDWM_SHOW_A_MENU_SIGNAL] = - g_signal_new("show_menu", + g_signal_new("show-menu", G_OBJECT_CLASS_TYPE(object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (HDWMClass,show_menu), @@ -1124,6 +1124,8 @@ memset(hdwm->priv, 0, sizeof(HDWMPrivate)); + hdwm->priv->init_dbus = TRUE; + /* Check for configurable lowmem values. */ hdwm->priv->lowmem_min_distance @@ -2295,7 +2297,7 @@ return; case HD_TN_ACTIVATE_MAIN_MENU: g_debug ("activating main menu: signal"); - g_signal_emit_by_name (hdwm, "show_menu"); + g_signal_emit_by_name (hdwm, "show-menu"); return; case HD_TN_ACTIVATE_LAST_APP_WINDOW: hdwm->priv->has_focus = FALSE; Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-08 15:34:00 UTC (rev 11521) +++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-08 15:43:16 UTC (rev 11522) @@ -30,6 +30,7 @@ #include "hn-app-pixbuf-anim-blinker.h" #include <gdk/gdkx.h> +#include <gdk/gdkkeysyms.h> #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -93,6 +94,7 @@ GtkWidget *active_menu_item; gboolean is_open; + gboolean fullscreen; GtkIconTheme *icon_theme; GtkWidget *icon; @@ -119,6 +121,7 @@ static void hd_switcher_menu_changed_stack_cb (HDWM *hdwm, HDEntryInfo *info, HDSwitcherMenu *switcher); static void hd_switcher_menu_show_menu_cb (HDWM *hdwm, HDSwitcherMenu *switcher); static void hd_switcher_menu_long_press_cb (HDWM *hdwm, HDSwitcherMenu *switcher); +static void hd_switcher_menu_fullscreen_cb (HDWM *hdwm, gboolean fullscreen, HDSwitcherMenu *switcher); static void hd_switcher_menu_notification_added_cb (GtkTreeModel *tree_model, GtkTreePath *path, @@ -146,7 +149,8 @@ switcher->priv->active_menu_item = NULL; - switcher->priv->is_open = FALSE; + switcher->priv->is_open = + switcher->priv->fullscreen = FALSE; switcher->priv->last_iter_added = NULL; @@ -215,6 +219,57 @@ return retval; } +static gboolean +hd_switcher_menu_popup_window_keypress_cb (GtkWidget *widget, + GdkEventKey *event, + HDSwitcherMenu *switcher) +{ + HildonDesktopPopupWindow *window = + HILDON_DESKTOP_POPUP_WINDOW (widget); + + if (event->keyval == GDK_Left || + event->keyval == GDK_KP_Left || + event->keyval == GDK_Escape) + { + hildon_desktop_popup_window_popdown (window); + + if (event->keyval == GDK_Escape) + { + /* pass focus to the last active application */ + hd_wm_focus_active_window (switcher->hdwm); + } + else + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + + GdkWindow *window = gtk_widget_get_parent_window (GTK_WIDGET (switcher)); + gtk_widget_grab_focus (GTK_WIDGET (switcher)); + hd_wm_activate_window (HD_TN_ACTIVATE_KEY_FOCUS,window); + } + + return TRUE; + } + + return FALSE; +} + +static gboolean +hd_switcher_menu_switcher_keypress_cb (GtkWidget *widget, + GdkEventKey *event, + HDSwitcherMenu *switcher) +{ + if (event->keyval == GDK_Right || + event->keyval == GDK_KP_Right) + { + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE); + + g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled"); + } + + return TRUE; +} + static void hd_switcher_menu_update_open (HildonDesktopPopupWindow *window, HDSwitcherMenu *switcher) { @@ -232,6 +287,9 @@ hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (l->data),FALSE); } } + + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); } static GObject * @@ -298,6 +356,16 @@ gtk_widget_show (GTK_WIDGET (switcher->priv->menu_applications)); gtk_widget_show (GTK_WIDGET (switcher->priv->menu_notifications)); + g_signal_connect (switcher->priv->popup_window, + "key-press-event", + G_CALLBACK (hd_switcher_menu_popup_window_keypress_cb), + (gpointer)switcher); + + g_signal_connect (button, + "key-press-event", + G_CALLBACK (hd_switcher_menu_switcher_keypress_cb), + (gpointer)switcher); + g_signal_connect (switcher, "style-set", G_CALLBACK (hd_switcher_menu_style_set), @@ -349,7 +417,7 @@ (gpointer)switcher); g_signal_connect (switcher->hdwm, - "show_menu", + "show-menu", G_CALLBACK (hd_switcher_menu_show_menu_cb), (gpointer)switcher); @@ -358,6 +426,11 @@ G_CALLBACK (hd_switcher_menu_long_press_cb), (gpointer)switcher); + g_signal_connect (switcher->hdwm, + "fullscreen", + G_CALLBACK (hd_switcher_menu_fullscreen_cb), + (gpointer)switcher); + g_signal_connect_after (switcher->nm, "row-inserted", G_CALLBACK (hd_switcher_menu_notification_added_cb), @@ -382,6 +455,10 @@ hildon_desktop_popup_menu_add_item (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item)); + hildon_desktop_popup_menu_add_item + (switcher->priv->menu_applications, + GTK_MENU_ITEM (gtk_separator_menu_item_new ())); + return object; } @@ -525,53 +602,65 @@ menu_height = req.height; main_height = gdk_screen_get_height (screen); - if (FALSE) + switch (orientation) { - *x = 0; - *y = MAX (0, (main_height - menu_height)); - } - else - { - switch (orientation) - { - case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT: + case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT: + if (switcher->priv->fullscreen) + *x = 0; + else *x = workarea.x; - if (main_height - button->allocation.y < menu_height) - *y = MAX (0, (main_height - menu_height)); - else - *y = button->allocation.y; - break; + if (main_height - button->allocation.y < menu_height) + *y = MAX (0, (main_height - menu_height)); + else + *y = button->allocation.y; + break; - case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT: + case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT: + if (switcher->priv->fullscreen) + *x = gdk_screen_get_width (screen) - req.width; + else *x = workarea.x + workarea.width - req.width; - if (main_height - button->allocation.y < menu_height) - *y = MAX (0, (main_height - menu_height)); - else - *y = button->allocation.y; - break; + if (main_height - button->allocation.y < menu_height) + *y = MAX (0, (main_height - menu_height)); + else + *y = button->allocation.y; + break; - case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_TOP: - *x = button->allocation.x; - *y = workarea.y; - break; + case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_TOP: + *x = button->allocation.x; - case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_BOTTOM: - *x = button->allocation.x; - *y = workarea.y + workarea.height - req.height; - break; + if (switcher->priv->fullscreen) + *y = req.height; + else + *y = workarea.y; + break; - default: - g_assert_not_reached (); - } + case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_BOTTOM: + *x = button->allocation.x; + + if (switcher->priv->fullscreen) + *y = main_height - req.height; + else + *y = workarea.y + workarea.height - req.height; + break; + + default: + g_assert_not_reached (); } } - static void hd_switcher_menu_toggled_cb (GtkWidget *button, HDSwitcherMenu *switcher) { + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON))) + { + hildon_desktop_popup_window_popdown (switcher->priv->popup_window); + return; + } + + hildon_desktop_popup_window_popup (switcher->priv->popup_window, hd_switcher_menu_position_func, @@ -591,7 +680,7 @@ GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), - GTK_WIDGET (switcher->priv->icon)); + GTK_WIDGET (switcher->priv->icon)); g_object_unref (G_OBJECT (switcher->priv->icon)); } @@ -658,9 +747,6 @@ HDEntryInfo *entry = child->data; - g_debug ("Creating new app menu item %s", - hd_entry_info_peek_title (entry)); - menu_item = hd_switcher_menu_item_new_from_entry_info (entry, TRUE); hildon_desktop_popup_menu_add_item @@ -670,6 +756,7 @@ hildon_desktop_popup_menu_select_item (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item)); + switcher->priv->active_menu_item = menu_item; } /* append the separator for this app*/ @@ -784,19 +871,56 @@ HDEntryInfo *info, HDSwitcherMenu *switcher) { + GList *children = NULL, *l; + children = + hildon_desktop_popup_menu_get_children (switcher->priv->menu_applications); + + for (l = children; l != NULL; l = g_list_next (l)) + { + if (HD_IS_SWITCHER_MENU_ITEM (l->data)) + { + HDEntryInfo *info = + hd_switcher_menu_item_get_entry_info (HD_SWITCHER_MENU_ITEM (l->data)); + + if (hd_entry_info_is_active (info)) + { + hildon_desktop_popup_menu_select_item + (switcher->priv->menu_applications, GTK_MENU_ITEM (l->data)); + + switcher->priv->active_menu_item = GTK_WIDGET (l->data); + } + } + } } static void hd_switcher_menu_show_menu_cb (HDWM *hdwm, HDSwitcherMenu *switcher) { + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE); + g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled"); } static void +hd_switcher_menu_fullscreen_cb (HDWM *hdwm, gboolean fullscreen, HDSwitcherMenu *switcher) +{ + switcher->priv->fullscreen = fullscreen; +} + +static void hd_switcher_menu_long_press_cb (HDWM *hdwm, HDSwitcherMenu *switcher) { - + g_debug ("Heeeeeeeereeee"); + if (switcher->priv->is_open) + { + hildon_desktop_popup_menu_activate_item + (switcher->priv->menu_applications, + GTK_MENU_ITEM (switcher->priv->active_menu_item)); + } + else + hd_wm_top_desktop (); } static void @@ -838,7 +962,15 @@ hildon_desktop_popup_menu_add_item (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item)); + hildon_desktop_popup_menu_select_item + (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item)); + hd_switcher_menu_replace_blinking_icon (switcher, icon); + + hildon_desktop_popup_menu_add_item + (switcher->priv->menu_notifications, + GTK_MENU_ITEM (gtk_separator_menu_item_new ())); + switcher->priv->last_iter_added = NULL; } @@ -855,15 +987,22 @@ for (l = children; l != NULL; l = g_list_next (l)) { - gint _id = - hd_switcher_menu_item_get_notification_id (HD_SWITCHER_MENU_ITEM (l->data)); + if (!GTK_IS_SEPARATOR_MENU_ITEM (l->data)) + { + gint _id = + hd_switcher_menu_item_get_notification_id (HD_SWITCHER_MENU_ITEM (l->data)); - if (_id == id) - { - hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications, - GTK_MENU_ITEM (l->data)); - break; - } + if (_id == id) + { + hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications, + GTK_MENU_ITEM (l->data)); + + if (l->prev && GTK_IS_SEPARATOR_MENU_ITEM (l->prev->data)) + hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications, + GTK_MENU_ITEM (l->prev->data)); + break; + } + } } g_list_free (children);
- Previous message: [maemo-commits] r11521 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Next message: [maemo-commits] r11523 - projects/haf/trunk/dosfstools/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]