*
* #HildonNote is a convenient way to prompt users for a small amount of
* input. A simple note contains an information text and, in case of
- * confirmation notes, it shows buttons to confirm or cancel. It also can
- * include a progress bar.
+ * confirmation notes, it shows buttons to confirm or cancel. It can also
+ * include a #GtkProgressBar.
*
* This widget provides convenient functions to create either
* information notes, confirmation notes or cancel notes, which are
hildon_note_unrealize (GtkWidget *widget);
static void
+hildon_note_size_request (GtkWidget *note,
+ GtkRequisition *req);
+
+static void
label_size_request (GtkWidget *label,
GtkRequisition *req,
GtkWidget *note);
GValue *value,
GParamSpec *pspec);
-static gboolean
-sound_handling (GtkWidget *widget,
- GdkEventExpose *event,
+static void
+on_show_cb (GtkWidget *widget,
gpointer data);
+static gboolean
+sound_handling (gpointer data);
+
static void
unpack_widget (GtkWidget *widget);
object_class->get_property = hildon_note_get_property;
widget_class->realize = hildon_note_realize;
widget_class->unrealize = hildon_note_unrealize;
+ widget_class->size_request = hildon_note_size_request;
+ /**
+ * HildonNote:type:
+ *
+ * The type of the #HildonNote, defining its contents, behavior, and
+ * theming.
+ */
g_object_class_install_property (object_class,
PROP_HILDON_NOTE_TYPE,
g_param_spec_enum ("note-type",
/**
* HildonNote:description:
*
- * Description for the note.
+ * The text that appears in the #HildonNote.
*/
g_object_class_install_property (object_class,
PROP_HILDON_NOTE_DESCRIPTION,
/**
* HildonNote:progressbar:
*
- * Progressbar for the note (if any).
+ * If set, a #GtkProgressBar visible in the note.
*/
g_object_class_install_property (object_class,
PROP_HILDON_NOTE_PROGRESSBAR,
priv->event_box = gtk_event_box_new ();
priv->icon = NULL;
priv->stock_icon = NULL;
+ priv->idle_handler = 0;
gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), FALSE);
gtk_event_box_set_above_child (GTK_EVENT_BOX (priv->event_box), TRUE);
g_signal_connect (priv->event_box, "button-press-event",
G_CALLBACK (event_box_press_event), dialog);
+ /* Because ESD is synchronous, we wish to play sound after the
+ note is already on screen to avoid blocking its appearance */
+ g_signal_connect (GTK_WIDGET (dialog), "show",
+ G_CALLBACK (on_show_cb), NULL);
+
/* Acquire real references to our internal children, since
they are not nessecarily packed into container in each
layout */
g_free (priv->stock_icon);
priv->stock_icon = NULL;
}
+ if (priv->idle_handler) {
+ g_source_remove (priv->idle_handler);
+ priv->idle_handler = 0;
+ }
if (priv->progressbar)
g_object_unref (priv->progressbar);
}
static void
+hildon_note_size_request (GtkWidget *note,
+ GtkRequisition *req)
+{
+ GTK_WIDGET_CLASS (parent_class)->size_request (note, req);
+ req->width = gdk_screen_get_width (gtk_widget_get_screen (note));
+}
+
+static void
screen_size_changed (GdkScreen *screen,
GtkWidget *note)
{
HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
- gint screen_width = gdk_screen_get_width (screen);
- gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
+
+ hildon_note_rename (HILDON_NOTE (note));
if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
- g_object_set (note, "width-request", screen_width, NULL);
+ gint screen_width = gdk_screen_get_width (screen);
+ gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
g_object_set (priv->label, "width-request", text_width, NULL);
return;
/* Border only, no titlebar */
gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER);
- /* Because ESD is synchronous, we wish to play sound after the
- note is already on screen to avoid blocking its appearance */
- if (priv->sound_signal_handler == 0)
- priv->sound_signal_handler = g_signal_connect_after(widget,
- "expose-event", G_CALLBACK (sound_handling), NULL);
-
/* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */
display = gdk_drawable_get_display (widget->window);
atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE");
GEnumValue *value;
GEnumClass *enum_class;
gchar *name;
+ GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (note));
+ gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
+ const gchar *portrait_suffix = portrait ? "-portrait" : NULL;
HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
value = g_enum_get_value (enum_class, priv->note_n);
- name = g_strconcat ("HildonNote-", value->value_nick, NULL);
+ name = g_strconcat ("HildonNote-", value->value_nick, portrait_suffix, NULL);
gtk_widget_set_name (GTK_WIDGET (note), name);
g_free (name);
* @text: sets the button text and if there is two buttons in dialog,
* the button texts will be <text>, "Cancel".
*
- * Sets the button text to be used by the hildon_note widget.
+ * Sets the text of the button in @note.
*/
void
hildon_note_set_button_text (HildonNote *note,
* @text_ok: the new text of the default OK button
* @text_cancel: the new text of the default cancel button
*
- * Sets the button texts to be used by this hildon_note widget.
+ * Sets the text for the buttons in @note.
*/
void
hildon_note_set_button_texts (HildonNote *note,
}
}
-/* We play a system sound when the note comes visible */
-static gboolean
-sound_handling (GtkWidget *widget,
- GdkEventExpose *event,
+static void
+on_show_cb (GtkWidget *widget,
gpointer data)
{
- HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
- g_assert (priv);
+ HildonNotePrivate *priv;
- g_signal_handler_disconnect (widget, priv->sound_signal_handler);
+ priv = HILDON_NOTE_GET_PRIVATE (widget);
+ priv->idle_handler = g_idle_add (sound_handling, widget);
+}
- priv->sound_signal_handler = 0;
+/* We play a system sound when the note comes visible */
+static gboolean
+sound_handling (gpointer data)
+{
+ HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (data);
+ g_assert (priv);
switch (priv->note_n)
{
break;
};
+ priv->idle_handler = 0;
+
return FALSE;
}