/** * mx_menu_add_action: * @menu: A #MxMenu * @action: A #MxAction * * Append @action to @menu. * */ void mx_menu_add_action (MxMenu *menu, MxAction *action) { MxMenuChild child; ClutterActor *button_child; g_return_if_fail (MX_IS_MENU (menu)); g_return_if_fail (MX_IS_ACTION (action)); MxMenuPrivate *priv = menu->priv; child.action = g_object_ref_sink (action); /* TODO: Connect to notify signals in case action properties change */ child.box = g_object_new (MX_TYPE_BUTTON, "action", child.action, NULL); mx_button_set_action (MX_BUTTON (child.box), child.action); /* align to the left */ button_child = clutter_actor_get_child_at_index ((ClutterActor*) child.box, 0); clutter_actor_set_x_align (button_child, CLUTTER_ACTOR_ALIGN_START); g_signal_connect (child.box, "clicked", G_CALLBACK (mx_menu_button_clicked_cb), action); g_signal_connect (child.box, "enter-event", G_CALLBACK (mx_menu_button_enter_event_cb), menu); clutter_actor_add_child (CLUTTER_ACTOR (menu), CLUTTER_ACTOR (child.box)); g_array_append_val (priv->children, child); clutter_actor_queue_relayout (CLUTTER_ACTOR (menu)); }
static void mx_button_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { MxButton *button = MX_BUTTON (gobject); switch (prop_id) { case PROP_LABEL: mx_button_set_label (button, g_value_get_string (value)); break; case PROP_ICON_NAME: mx_button_set_icon_name (button, g_value_get_string (value)); break; case PROP_ICON_SIZE: mx_button_set_icon_size (button, g_value_get_uint (value)); break; case PROP_IS_TOGGLE: mx_button_set_is_toggle (button, g_value_get_boolean (value)); break; case PROP_TOGGLED: mx_button_set_toggled (button, g_value_get_boolean (value)); break; case PROP_ACTION: mx_button_set_action (button, g_value_get_object (value)); break; case PROP_ICON_POSITION: mx_button_set_icon_position (button, g_value_get_enum (value)); break; case PROP_ICON_VISIBLE: mx_button_set_icon_visible (button, g_value_get_boolean (value)); break; case PROP_LABEL_VISIBLE: mx_button_set_label_visible (button, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } }
static gboolean _create_settings_dialog (MexInfoBar *self) { MexInfoBarPrivate *priv = self->priv; ClutterActor *dialog, *network_graphic; ClutterActor *network_tile, *dialog_layout, *dialog_label; ClutterActor *network_button; MxAction *close_dialog, *network_settings; dialog = mx_dialog_new (); mx_stylable_set_style_class (MX_STYLABLE (dialog), "MexInfoBarDialog"); dialog_label = mx_label_new_with_text (_("Settings")); mx_stylable_set_style_class (MX_STYLABLE (dialog_label), "DialogHeader"); /* Create actions for settings dialog */ network_settings = _action_new_from_desktop_file ("mex-networks.desktop"); close_dialog = mx_action_new_full ("close", _("Close"), G_CALLBACK (_close_dialog_cb), self); dialog_layout = mx_table_new (); mx_table_set_column_spacing (MX_TABLE (dialog_layout), 10); mx_table_set_row_spacing (MX_TABLE (dialog_layout), 30); mx_table_insert_actor (MX_TABLE (dialog_layout), CLUTTER_ACTOR (dialog_label), 0, 0); if (network_settings) { gchar *tmp; network_graphic = mx_image_new (); mx_stylable_set_style_class (MX_STYLABLE (network_graphic), "NetworkGraphic"); tmp = g_build_filename (mex_get_data_dir (), "style", "graphic-network.png", NULL); mx_image_set_from_file (MX_IMAGE (network_graphic), tmp, NULL); g_free (tmp); network_tile = mex_tile_new (); mex_tile_set_label (MEX_TILE (network_tile), _("Network")); mex_tile_set_important (MEX_TILE (network_tile), TRUE); network_button = mx_button_new (); mx_button_set_action (MX_BUTTON (network_button), network_settings); mx_bin_set_child (MX_BIN (network_tile), network_button); mx_bin_set_child (MX_BIN (network_button), network_graphic); mx_table_insert_actor (MX_TABLE (dialog_layout), CLUTTER_ACTOR (network_tile), 1, 1); } if (!network_settings) { ClutterActor *no_settings; no_settings = mx_label_new_with_text (_("No settings helpers installed")); clutter_actor_destroy (priv->settings_button); mx_table_insert_actor (MX_TABLE (dialog_layout), CLUTTER_ACTOR (no_settings), 1, 0); } mx_bin_set_child (MX_BIN (dialog), dialog_layout); mx_dialog_add_action (MX_DIALOG (dialog), close_dialog); priv->settings_dialog = g_object_ref (dialog); return TRUE; }