2 * This file is a part of hildon
4 * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved.
6 * Contact: Rodrigo Novo <rodrigo.novo@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27 * @short_description: A widget to ask confirmation from the user.
29 * #HildonNote is a convenient way to prompt users for a small amount of
30 * input. A simple note contains an information text and, in case of
31 * confirmation notes, it shows buttons to confirm or cancel. It can also
32 * include a #GtkProgressBar.
34 * This widget provides convenient functions to create either
35 * information notes, confirmation notes or cancel notes, which are
36 * useful to show the progress of a requested task allowing the user
39 * To create information notes you can use
40 * hildon_note_new_information(). hildon_note_new_confirmation()
41 * creates a note with a text and two buttons to confirm or
42 * cancel. Note that it is possible to create a confirmation note with
43 * customized buttons by using
44 * hildon_note_new_confirmation_add_buttons().
46 * To create a note with a text, a progress bar and cancel button,
47 * hildon_note_new_cancel_with_progress_bar() can be used.
50 * <title>HildonNote example</title>
54 * show_confirmation_note (GtkWindow *parent)
58 * note = hildon_note_new_confirmation (parent, "Confirmation message...");
60 * retcode = gtk_dialog_run (GTK_DIALOG (note));
61 * gtk_widget_destroy (note);
63 * if (retcode == GTK_RESPONSE_OK) {
64 * g_debug ("User pressed 'OK' button'");
67 * g_debug ("User pressed 'Cancel' button");
83 #include <X11/Xatom.h>
86 #undef HILDON_DISABLE_DEPRECATED
88 #include "hildon-note.h"
89 #include "hildon-defines.h"
90 #include "hildon-sound.h"
91 #include "hildon-banner.h"
92 #include "hildon-enum-types.h"
93 #include "hildon-note-private.h"
95 #define HILDON_INFORMATION_NOTE_MIN_HEIGHT 140
97 #define HILDON_INFORMATION_NOTE_MARGIN 100
99 #define CONFIRMATION_SOUND_PATH \
100 "/usr/share/sounds/ui-confirmation_note.wav"
102 #define INFORMATION_SOUND_PATH \
103 "/usr/share/sounds/ui-information_note.wav"
105 #define _(String) dgettext("hildon-libs", String)
108 hildon_note_class_init (HildonNoteClass *class);
111 hildon_note_init (HildonNote *dialog);
114 hildon_note_rebuild (HildonNote *note);
117 hildon_note_rename (HildonNote *note);
120 hildon_note_finalize (GObject *obj_self);
123 hildon_note_realize (GtkWidget *widget);
126 hildon_note_unrealize (GtkWidget *widget);
129 hildon_note_size_request (GtkWidget *note,
130 GtkRequisition *req);
133 label_size_request (GtkWidget *label,
138 hildon_note_set_property (GObject *object,
144 hildon_note_get_property (GObject *object,
150 on_show_cb (GtkWidget *widget,
153 sound_handling (gpointer data);
156 unpack_widget (GtkWidget *widget);
161 PROP_HILDON_NOTE_TYPE,
162 PROP_HILDON_NOTE_DESCRIPTION,
163 PROP_HILDON_NOTE_ICON,
164 PROP_HILDON_NOTE_PROGRESSBAR,
165 PROP_HILDON_NOTE_STOCK_ICON
168 static GtkDialogClass* parent_class;
171 event_box_press_event (GtkEventBox *event_box,
172 GdkEventButton *event,
175 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
177 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
178 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
179 gtk_dialog_response (note, GTK_RESPONSE_DELETE_EVENT);
187 hildon_note_set_property (GObject *object,
192 HildonNote *note = HILDON_NOTE (object);
193 HildonNotePrivate *priv;
196 priv = HILDON_NOTE_GET_PRIVATE (note);
201 case PROP_HILDON_NOTE_TYPE:
202 priv->note_n = g_value_get_enum (value);
203 hildon_note_rename (note);
204 hildon_note_rebuild (note);
207 case PROP_HILDON_NOTE_DESCRIPTION:
208 if (priv->original_description)
209 g_free (priv->original_description);
210 priv->original_description = g_value_dup_string (value);
212 gtk_label_set_text (GTK_LABEL (priv->label), priv->original_description);
213 /* FIXME Is the "original_description" used anywhere? */
217 case PROP_HILDON_NOTE_ICON:
221 priv->icon = g_value_dup_string (value);
224 case PROP_HILDON_NOTE_STOCK_ICON:
225 if (priv->stock_icon) {
226 g_free (priv->stock_icon);
228 priv->stock_icon = g_value_dup_string (value);
231 case PROP_HILDON_NOTE_PROGRESSBAR:
232 widget = g_value_get_object (value);
233 if (widget != priv->progressbar)
235 if (priv->progressbar)
236 g_object_unref (priv->progressbar);
238 priv->progressbar = widget;
242 g_object_ref (widget);
243 gtk_object_sink (GTK_OBJECT (widget));
246 hildon_note_rebuild (note);
251 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
257 hildon_note_get_property (GObject *object,
262 HildonNote *note = HILDON_NOTE (object);
263 HildonNotePrivate *priv;
265 priv = HILDON_NOTE_GET_PRIVATE (note);
269 case PROP_HILDON_NOTE_TYPE:
270 g_value_set_enum (value, priv->note_n);
273 case PROP_HILDON_NOTE_DESCRIPTION:
274 g_value_set_string (value, priv->original_description);
277 case PROP_HILDON_NOTE_ICON:
278 g_value_set_string (value, priv->icon);
281 case PROP_HILDON_NOTE_STOCK_ICON:
282 g_value_set_string (value, priv->stock_icon);
285 case PROP_HILDON_NOTE_PROGRESSBAR:
286 g_value_set_object (value, priv->progressbar);
290 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
296 * hildon_note_get_type:
298 * Returns GType for HildonNote.
300 * Returns: HildonNote type
303 hildon_note_get_type (void)
305 static GType dialog_type = 0;
308 static const GTypeInfo dialog_info = {
309 sizeof(HildonNoteClass),
310 NULL, /* base_init */
311 NULL, /* base_finalize */
312 (GClassInitFunc) hildon_note_class_init,
313 NULL, /* class_finalize */
314 NULL, /* class_data */
317 (GInstanceInitFunc) hildon_note_init
319 dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
327 hildon_note_class_init (HildonNoteClass *class)
329 GObjectClass *object_class = G_OBJECT_CLASS (class);
330 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
332 /* set the global parent_class */
333 parent_class = g_type_class_peek_parent (class);
335 g_type_class_add_private (class, sizeof (HildonNotePrivate));
337 object_class->finalize = hildon_note_finalize;
338 object_class->set_property = hildon_note_set_property;
339 object_class->get_property = hildon_note_get_property;
340 widget_class->realize = hildon_note_realize;
341 widget_class->unrealize = hildon_note_unrealize;
342 widget_class->size_request = hildon_note_size_request;
347 * The type of the #HildonNote, defining its contents, behavior, and
350 g_object_class_install_property (object_class,
351 PROP_HILDON_NOTE_TYPE,
352 g_param_spec_enum ("note-type",
354 "The type of the note dialog",
355 hildon_note_type_get_type (),
356 HILDON_NOTE_TYPE_CONFIRMATION,
357 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
360 * HildonNote:description:
362 * The text that appears in the #HildonNote.
364 g_object_class_install_property (object_class,
365 PROP_HILDON_NOTE_DESCRIPTION,
366 g_param_spec_string ("description",
368 "The text that appears in the note dialog",
377 * Deprecated: Since 2.2
379 g_object_class_install_property (object_class,
380 PROP_HILDON_NOTE_ICON,
381 g_param_spec_string ("icon",
383 "The name of the icon that appears in the note dialog",
388 * HildonNote:stock-icon:
390 * Stock icon name for the note.
392 * Deprecated: Since 2.2
394 g_object_class_install_property (object_class,
395 PROP_HILDON_NOTE_STOCK_ICON,
396 g_param_spec_string ("stock-icon",
398 "The stock name of the icon that appears in the note dialog",
403 * HildonNote:progressbar:
405 * If set, a #GtkProgressBar visible in the note.
407 g_object_class_install_property (object_class,
408 PROP_HILDON_NOTE_PROGRESSBAR,
409 g_param_spec_object ("progressbar",
410 "Progressbar widget",
411 "The progressbar that appears in the note dialog",
412 GTK_TYPE_PROGRESS_BAR,
417 hildon_note_init (HildonNote *dialog)
419 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (dialog);
422 priv->label = gtk_label_new (NULL);
423 gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE);
424 gtk_label_set_justify (GTK_LABEL (priv->label), GTK_JUSTIFY_LEFT);
426 priv->event_box = gtk_event_box_new ();
428 priv->stock_icon = NULL;
429 priv->idle_handler = 0;
431 gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), FALSE);
432 gtk_event_box_set_above_child (GTK_EVENT_BOX (priv->event_box), TRUE);
433 g_signal_connect (priv->event_box, "button-press-event",
434 G_CALLBACK (event_box_press_event), dialog);
436 /* Because ESD is synchronous, we wish to play sound after the
437 note is already on screen to avoid blocking its appearance */
438 g_signal_connect (GTK_WIDGET (dialog), "show",
439 G_CALLBACK (on_show_cb), NULL);
441 /* Acquire real references to our internal children, since
442 they are not nessecarily packed into container in each
444 g_object_ref_sink (priv->event_box);
445 g_object_ref_sink (priv->label);
447 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
448 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
450 /* We use special hint to turn the note into information notification. */
451 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NOTIFICATION);
456 hildon_note_finalize (GObject *obj_self)
458 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (obj_self);
461 /* FIXME Some of this stuff should be moved to dispose */
463 /* Free internal data */
465 g_object_unref (priv->event_box);
468 g_object_unref (priv->label);
474 if (priv->stock_icon) {
475 g_free (priv->stock_icon);
476 priv->stock_icon = NULL;
478 if (priv->idle_handler) {
479 g_source_remove (priv->idle_handler);
480 priv->idle_handler = 0;
483 if (priv->progressbar)
484 g_object_unref (priv->progressbar);
486 if (priv->original_description)
487 g_free (priv->original_description);
489 G_OBJECT_CLASS (parent_class)->finalize (obj_self);
493 label_size_request (GtkWidget *label,
497 gint note_height = MAX (HILDON_INFORMATION_NOTE_MIN_HEIGHT, req->height);
498 g_object_set (note, "height-request", note_height, NULL);
502 resize_button (GtkWidget *button, gpointer *data)
504 gint width = GPOINTER_TO_INT (data);
505 g_object_set (button, "width-request", width, NULL);
509 hildon_note_orientation_update (HildonNote *note, GdkScreen *screen)
511 GtkDialog *dialog = GTK_DIALOG (note);
512 HildonNotePrivate* priv = HILDON_NOTE_GET_PRIVATE (note);
514 gint button_width, padding;
515 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
517 g_object_ref (dialog->action_area);
518 unpack_widget (dialog->action_area);
521 parent = dialog->vbox;
522 button_width = gdk_screen_get_width (screen) - HILDON_MARGIN_DOUBLE * 2;
523 padding = HILDON_MARGIN_DOUBLE;
525 parent = gtk_widget_get_parent (dialog->vbox);
526 button_width = priv->button_width;
530 gtk_box_pack_end (GTK_BOX (parent), dialog->action_area,
532 gtk_box_reorder_child (GTK_BOX (parent), dialog->action_area, 0);
533 gtk_container_foreach (GTK_CONTAINER (dialog->action_area),
534 (GtkCallback) resize_button,
535 GINT_TO_POINTER (button_width));
536 g_object_unref (dialog->action_area);
537 gtk_container_child_set (GTK_CONTAINER (priv->box), priv->label,
538 "padding", padding, NULL);
542 hildon_note_size_request (GtkWidget *note,
545 GTK_WIDGET_CLASS (parent_class)->size_request (note, req);
546 req->width = gdk_screen_get_width (gtk_widget_get_screen (note));
550 screen_size_changed (GdkScreen *screen,
553 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
555 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
556 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
557 gint screen_width = gdk_screen_get_width (screen);
558 gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
559 g_object_set (priv->label, "width-request", text_width, NULL);
562 } else if (priv->note_n == HILDON_NOTE_TYPE_CONFIRMATION) {
563 hildon_note_orientation_update (HILDON_NOTE (note), screen);
568 hildon_note_realize (GtkWidget *widget)
571 gboolean is_info_note = FALSE;
573 const gchar *notification_type;
574 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
577 /* Make widget->window accessible */
578 GTK_WIDGET_CLASS (parent_class)->realize (widget);
580 /* Border only, no titlebar */
581 gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER);
583 /* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */
584 display = gdk_drawable_get_display (widget->window);
585 atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE");
587 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
588 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
589 notification_type = "_HILDON_NOTIFICATION_TYPE_INFO";
592 notification_type = "_HILDON_NOTIFICATION_TYPE_CONFIRMATION";
595 XChangeProperty (GDK_WINDOW_XDISPLAY (widget->window), GDK_WINDOW_XID (widget->window),
596 atom, XA_STRING, 8, PropModeReplace, (guchar *) notification_type,
597 strlen (notification_type));
600 g_signal_connect (priv->label, "size-request", G_CALLBACK (label_size_request), widget);
603 GdkScreen *screen = gtk_widget_get_screen (widget);
604 g_signal_connect (screen, "size-changed", G_CALLBACK (screen_size_changed), widget);
605 screen_size_changed (screen, widget);
609 hildon_note_unrealize (GtkWidget *widget)
611 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
612 GdkScreen *screen = gtk_widget_get_screen (widget);
614 g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
615 g_signal_handlers_disconnect_by_func (priv->label, G_CALLBACK (label_size_request), widget);
617 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
621 /* Helper function for removing a widget from it's container.
622 we own a separate reference to each object we try to unpack,
623 so extra referencing is not needed. */
625 unpack_widget (GtkWidget *widget)
627 g_assert (widget == NULL || GTK_IS_WIDGET (widget));
629 if (widget && widget->parent)
630 gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
634 Name the widget and text label based on the note type. This is used
635 by the theme to give proper backgrounds depending on the note type.
638 hildon_note_rename (HildonNote *note)
641 GEnumClass *enum_class;
644 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
646 enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
647 value = g_enum_get_value (enum_class, priv->note_n);
649 name = g_strconcat ("HildonNote-", value->value_nick, NULL);
650 gtk_widget_set_name (GTK_WIDGET (note), name);
653 name = g_strconcat ("HildonNoteLabel-", value->value_nick, NULL);
654 gtk_widget_set_name (priv->label, name);
657 g_type_class_unref (enum_class);
661 hildon_note_rebuild (HildonNote *note)
664 HildonNotePrivate *priv;
665 gboolean is_info_note = FALSE;
667 g_assert (HILDON_IS_NOTE (note));
669 priv = HILDON_NOTE_GET_PRIVATE (note);
672 dialog = GTK_DIALOG (note);
674 /* Reuse exiting content widgets for new layout */
675 unpack_widget (priv->label);
676 unpack_widget (priv->progressbar);
677 unpack_widget (priv->event_box);
679 /* Destroy old layout and buttons */
681 gtk_widget_destroy (priv->box);
684 if (priv->okButton) {
685 gtk_widget_destroy (priv->okButton);
686 priv->okButton = NULL;
688 if (priv->cancelButton) {
689 gtk_widget_destroy (priv->cancelButton);
690 priv->cancelButton = NULL;
693 /* Add needed buttons and images for each note type */
694 switch (priv->note_n)
696 case HILDON_NOTE_TYPE_CONFIRMATION:
697 priv->okButton = gtk_dialog_add_button (dialog,
698 _("wdgt_bd_yes"), GTK_RESPONSE_OK);
699 priv->cancelButton = gtk_dialog_add_button (dialog,
700 _("wdgt_bd_no"), GTK_RESPONSE_CANCEL);
701 gtk_widget_show (priv->cancelButton);
702 g_object_get (priv->okButton, "width-request",
703 &priv->button_width, NULL);
704 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
707 case HILDON_NOTE_TYPE_PROGRESSBAR:
708 priv->cancelButton = gtk_dialog_add_button (dialog,
709 _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL);
710 gtk_widget_show (priv->cancelButton);
711 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
714 case HILDON_NOTE_TYPE_INFORMATION_THEME:
715 case HILDON_NOTE_TYPE_INFORMATION:
719 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
724 /* Don't display the action area if this is just an information
725 * note. This prevents text from being slightly aligned to the
729 gtk_widget_hide (dialog->action_area);
731 gtk_widget_show (dialog->action_area);
733 gtk_widget_set_no_show_all (dialog->action_area, is_info_note);
735 /* Pack label vertically. Spacing is only necessary for the progressbar note. */
736 priv->box = gtk_vbox_new (FALSE, priv->progressbar ? HILDON_MARGIN_DOUBLE : 0);
737 gtk_container_add (GTK_CONTAINER (priv->event_box), priv->box);
738 gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0);
740 if (priv->progressbar)
741 gtk_box_pack_start (GTK_BOX (priv->box), priv->progressbar, FALSE, FALSE, 0);
743 gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->event_box);
745 gtk_widget_show_all (priv->event_box);
749 * hildon_note_new_confirmation_add_buttons:
750 * @parent: the parent window. The X window ID of the parent window
751 * has to be the same as the X window ID of the application. This is
752 * important so that the window manager could handle the windows
754 * In GTK the X window ID can be checked using
755 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
756 * @description: the message to confirm
757 * @Varargs: arguments pairs for new buttons(label and return value).
758 * Terminate the list with %NULL value.
760 * Create a new confirmation note with custom buttons. Confirmation
761 * note has a text and any number of buttons. It's important to note
762 * that even though the name of the function might suggest, the
763 * default ok/cancel buttons are not appended but you have to provide
764 * all of the buttons.
766 * FIXME: This doc seems to be wrong, the two buttons aren't added so
767 * it would only contain the "additional" buttons? However, changing
768 * this would break those applications that rely on current behaviour.
770 * Returns: A #GtkWidget pointer of the note
773 hildon_note_new_confirmation_add_buttons (GtkWindow *parent,
774 const gchar *description,
782 g_return_val_if_fail (description != NULL, NULL);
784 GtkWidget *conf_note =
785 g_object_new (HILDON_TYPE_NOTE,
786 "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON,
787 "description", description,
791 gtk_window_set_transient_for (GTK_WINDOW (conf_note), parent);
793 /* Add the buttons from varargs */
794 va_start(args, description);
797 message = va_arg (args, char *);
802 value = va_arg (args, int);
804 button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value);
805 /* maemo-gtk is going to set the "no-show-all" property all
806 cancel/close-like buttons to TRUE, so that they are not shown. On
807 the other hand, this confirmation note with custom buttons should
808 not obey this rule, so we need to make sure they are shown. */
809 gtk_widget_show (button);
810 gtk_widget_set_no_show_all (button, FALSE);
820 * hildon_note_new_confirmation:
821 * @parent: the parent window. The X window ID of the parent window
822 * has to be the same as the X window ID of the application. This is
823 * important so that the window manager could handle the windows
824 * correctly. In GTK the X window ID can be checked using
825 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
826 * @description: the message to confirm
828 * Create a new confirmation note. Confirmation note has a text (description)
829 * that you specify and two buttons.
831 * Returns: a #GtkWidget pointer of the note
834 hildon_note_new_confirmation (GtkWindow *parent,
835 const gchar *description)
837 GtkWidget *dialog = NULL;
839 g_return_val_if_fail (description != NULL, NULL);
841 dialog = g_object_new (HILDON_TYPE_NOTE,
843 HILDON_NOTE_TYPE_CONFIRMATION,
844 "description", description, NULL);
847 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
853 * hildon_note_new_confirmation_with_icon_name:
854 * @parent: the parent window. The X window ID of the parent window
855 * has to be the same as the X window ID of the application. This is
856 * important so that the window manager could handle the windows
857 * correctly. In GTK the X window ID can be checked using
858 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
859 * @description: the message to confirm
860 * @icon_name: icon to be displayed. If NULL, default icon is used.
862 * Create a new confirmation note. Confirmation note has a text (description)
863 * that you specify and two buttons.
865 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
866 * with this function will be ignored. Use hildon_note_new_confirmation() instead.
868 * Returns: a #GtkWidget pointer of the note
871 hildon_note_new_confirmation_with_icon_name (GtkWindow *parent,
872 const gchar *description,
873 const gchar *icon_name)
877 dialog = hildon_note_new_confirmation (parent, description);
878 g_object_set (dialog, "icon", icon_name, NULL);
884 * hildon_note_new_information:
885 * @parent: the parent window. The X window ID of the parent window
886 * has to be the same as the X window ID of the application. This is
887 * important so that the window manager could handle the windows
888 * correctly. In GTK the X window ID can be checked using
889 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
890 * @description: the message to confirm
892 * Create a new information note. Information note has a text (description)
893 * that you specify and an OK button.
895 * Returns: a #GtkWidget pointer of the note
898 hildon_note_new_information (GtkWindow *parent,
899 const gchar *description)
901 GtkWidget *dialog = NULL;
903 g_return_val_if_fail (description != NULL, NULL);
905 dialog = g_object_new (HILDON_TYPE_NOTE,
907 HILDON_NOTE_TYPE_INFORMATION_THEME,
908 "description", description, NULL);
911 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
917 * hildon_note_new_information_with_icon_name:
918 * @parent: the parent window. The X window ID of the parent window
919 * has to be the same as the X window ID of the application. This is
920 * important so that the window manager could handle the windows
921 * correctly. In GTK the X window ID can be checked using
922 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
923 * @description: the message to confirm
924 * @icon_name: icon to be displayed. If NULL, default icon is used.
926 * Create a new information note. Information note has text(description)
927 * that you specify, an OK button and an icon.
929 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
930 * with this function will be ignored. Use hildon_note_new_information() instead.
932 * Returns: a #GtkWidget pointer of the note
935 hildon_note_new_information_with_icon_name (GtkWindow * parent,
936 const gchar *description,
937 const gchar *icon_name)
941 dialog = hildon_note_new_information (parent, description);
942 g_object_set (dialog, "icon", icon_name, NULL);
947 /* FIXME This documentation string LIES! */
950 * hildon_note_new_cancel_with_progress_bar:
951 * @parent: the parent window. The X window ID of the parent window
952 * has to be the same as the X window ID of the application. This is
953 * important so that the window manager could handle the windows
954 * correctly. In GTK the X window ID can be checked using
955 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
956 * @description: the action to cancel
957 * @progressbar: a pointer to #GtkProgressBar to be filled with the
958 * progressbar assigned to this note. Use this to set the fraction of
959 * progressbar done. This parameter can be %NULL as well, in which
960 * case plain text cancel note appears.
962 * Create a new cancel note with a progress bar. Cancel note has
963 * text(description) that you specify, a Cancel button and a progress bar.
965 * Returns: a #GtkDialog. Use this to get rid of this note when you
969 hildon_note_new_cancel_with_progress_bar (GtkWindow *parent,
970 const gchar *description,
971 GtkProgressBar *progressbar)
973 GtkWidget *dialog = NULL;
975 g_return_val_if_fail (description != NULL, NULL);
977 dialog = g_object_new (HILDON_TYPE_NOTE,
979 HILDON_NOTE_TYPE_PROGRESSBAR,
980 "description", description,
985 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
992 * hildon_note_set_button_text:
993 * @note: a #HildonNote
994 * @text: sets the button text and if there is two buttons in dialog,
995 * the button texts will be <text>, "Cancel".
997 * Sets the text of the button in @note.
1000 hildon_note_set_button_text (HildonNote *note,
1003 HildonNotePrivate *priv;
1005 g_return_if_fail (HILDON_IS_NOTE (note));
1007 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1010 if (priv->okButton) {
1011 gtk_button_set_label (GTK_BUTTON (priv->okButton), text);
1012 gtk_button_set_label (GTK_BUTTON (priv->cancelButton),
1015 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text);
1020 * hildon_note_set_button_texts:
1021 * @note: a #HildonNote
1022 * @text_ok: the new text of the default OK button
1023 * @text_cancel: the new text of the default cancel button
1025 * Sets the text for the buttons in @note.
1028 hildon_note_set_button_texts (HildonNote *note,
1029 const gchar *text_ok,
1030 const gchar *text_cancel)
1032 HildonNotePrivate *priv;
1034 g_return_if_fail (HILDON_IS_NOTE (note));
1036 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1039 if (priv->okButton) {
1040 gtk_button_set_label (GTK_BUTTON (priv->okButton), text_ok);
1041 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1043 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1048 on_show_cb (GtkWidget *widget,
1051 HildonNotePrivate *priv;
1053 priv = HILDON_NOTE_GET_PRIVATE (widget);
1054 priv->idle_handler = g_idle_add (sound_handling, widget);
1057 /* We play a system sound when the note comes visible */
1059 sound_handling (gpointer data)
1061 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (data);
1064 switch (priv->note_n)
1066 case HILDON_NOTE_TYPE_INFORMATION:
1067 case HILDON_NOTE_TYPE_INFORMATION_THEME:
1068 hildon_play_system_sound (INFORMATION_SOUND_PATH);
1071 case HILDON_NOTE_TYPE_CONFIRMATION:
1072 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
1073 hildon_play_system_sound (CONFIRMATION_SOUND_PATH);
1080 priv->idle_handler = 0;