brasero r979 - in branches/video: . src
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r979 - in branches/video: . src
- Date: Sat, 12 Jul 2008 13:47:25 +0000 (UTC)
Author: philippr
Date: Sat Jul 12 13:47:24 2008
New Revision: 979
URL: http://svn.gnome.org/viewvc/brasero?rev=979&view=rev
Log:
Added possibility to change the layout
* src/brasero-layout.c (brasero_layout_change_type),
(brasero_layout_type_changed_cb),
(brasero_layout_HV_radio_button_toggled_cb), (brasero_layout_init):
Modified:
branches/video/ChangeLog
branches/video/src/brasero-layout.c
Modified: branches/video/src/brasero-layout.c
==============================================================================
--- branches/video/src/brasero-layout.c (original)
+++ branches/video/src/brasero-layout.c Sat Jul 12 13:47:24 2008
@@ -138,17 +138,29 @@
"F7", N_(BRASERO_LAYOUT_NONE_TOOLTIP), G_CALLBACK (brasero_layout_empty_toggled_cb), 1 }
};
-const gchar description [] = "<ui>"
- "<menubar name='menubar' >"
- "<menu action='ViewMenu'>"
- "<placeholder name='ViewPlaceholder'>"
+const GtkRadioActionEntry radio_entries [] = {
+ { "HView", NULL, N_("_Horizontal Layout"),
+ NULL, N_("Set an horizontal layout"), 0 },
+
+ { "VView", NULL, N_("_Vertical Layout"),
+ NULL, N_("Set a vertical layout"), 1 },
+};
+
+const gchar description [] =
+ "<ui>"
+ "<menubar name='menubar' >"
+ "<menu action='ViewMenu'>"
+ "<placeholder name='ViewPlaceholder'>"
"<menuitem action='"BRASERO_LAYOUT_NONE_ID"'/>"
"<menuitem action='"BRASERO_LAYOUT_PREVIEW_ID"'/>"
"<separator/>"
- "</placeholder>"
- "</menu>"
- "</menubar>"
- "</ui>";
+ "<menuitem action='VView'/>"
+ "<menuitem action='HView'/>"
+ "<separator/>"
+ "</placeholder>"
+ "</menu>"
+ "</menubar>"
+ "</ui>";
/* GCONF keys */
#define BRASERO_KEY_DISPLAY_LAYOUT "/apps/brasero/display/layout"
@@ -938,47 +950,39 @@
}
static void
-brasero_layout_type_changed_cb (GConfClient *client,
- guint cxn,
- GConfEntry *entry,
- gpointer data)
+brasero_layout_change_type (BraseroLayout *layout,
+ BraseroLayoutType layout_type)
{
- GConfValue *value;
- GtkWidget *source_pane;
- GtkWidget *project_pane;
- BraseroLayoutType layout_type;
- BraseroLayout *layout = BRASERO_LAYOUT (data);
+ GtkWidget *source_pane = NULL;
+ GtkWidget *project_pane = NULL;
- value = gconf_entry_get_value (entry);
- if (value->type != GCONF_VALUE_INT)
- return;
-
- g_object_ref (layout->priv->preview_pane);
- if (layout->priv->layout_type == BRASERO_LAYOUT_BOTTOM)
- gtk_container_remove (GTK_CONTAINER (layout->priv->project), layout->priv->preview_pane);
- else
- gtk_container_remove (GTK_CONTAINER (layout->priv->main_box), layout->priv->preview_pane);
+ if (layout->priv->pane) {
+ g_object_ref (layout->priv->preview_pane);
+ if (layout->priv->layout_type == BRASERO_LAYOUT_BOTTOM)
+ gtk_container_remove (GTK_CONTAINER (layout->priv->project), layout->priv->preview_pane);
+ else
+ gtk_container_remove (GTK_CONTAINER (layout->priv->main_box), layout->priv->preview_pane);
- if (layout->priv->layout_type == BRASERO_LAYOUT_TOP
- || layout->priv->layout_type == BRASERO_LAYOUT_LEFT) {
- project_pane = gtk_paned_get_child1 (GTK_PANED (layout->priv->pane));
- source_pane = gtk_paned_get_child2 (GTK_PANED (layout->priv->pane));
- }
- else {
- source_pane = gtk_paned_get_child1 (GTK_PANED (layout->priv->pane));
- project_pane = gtk_paned_get_child2 (GTK_PANED (layout->priv->pane));
- }
+ if (layout->priv->layout_type == BRASERO_LAYOUT_TOP
+ || layout->priv->layout_type == BRASERO_LAYOUT_LEFT) {
+ project_pane = gtk_paned_get_child1 (GTK_PANED (layout->priv->pane));
+ source_pane = gtk_paned_get_child2 (GTK_PANED (layout->priv->pane));
+ }
+ else {
+ source_pane = gtk_paned_get_child1 (GTK_PANED (layout->priv->pane));
+ project_pane = gtk_paned_get_child2 (GTK_PANED (layout->priv->pane));
+ }
- g_object_ref (source_pane);
- gtk_container_remove (GTK_CONTAINER (layout->priv->pane), source_pane);
+ g_object_ref (source_pane);
+ gtk_container_remove (GTK_CONTAINER (layout->priv->pane), source_pane);
- g_object_ref (project_pane);
- gtk_container_remove (GTK_CONTAINER (layout->priv->pane), project_pane);
+ g_object_ref (project_pane);
+ gtk_container_remove (GTK_CONTAINER (layout->priv->pane), project_pane);
- gtk_widget_destroy (layout->priv->pane);
- layout->priv->pane = NULL;
+ gtk_widget_destroy (layout->priv->pane);
+ layout->priv->pane = NULL;
+ }
- layout_type = gconf_value_get_int (value);
if (layout_type > BRASERO_LAYOUT_BOTTOM
|| layout_type < BRASERO_LAYOUT_RIGHT)
layout_type = BRASERO_LAYOUT_RIGHT;
@@ -1001,39 +1005,123 @@
gtk_widget_show (layout->priv->pane);
gtk_box_pack_end (GTK_BOX (layout), layout->priv->pane, TRUE, TRUE, 0);
- switch (layout_type) {
- case BRASERO_LAYOUT_TOP:
- case BRASERO_LAYOUT_LEFT:
- gtk_paned_pack2 (GTK_PANED (layout->priv->pane), source_pane, TRUE, FALSE);
- gtk_paned_pack1 (GTK_PANED (layout->priv->pane), project_pane, TRUE, FALSE);
- break;
-
- case BRASERO_LAYOUT_BOTTOM:
- case BRASERO_LAYOUT_RIGHT:
- gtk_paned_pack2 (GTK_PANED (layout->priv->pane), project_pane, TRUE, FALSE);
- gtk_paned_pack1 (GTK_PANED (layout->priv->pane), source_pane, TRUE, FALSE);
- break;
-
- default:
- break;
- }
-
g_signal_connect (layout->priv->pane,
"notify::position",
G_CALLBACK (brasero_layout_pane_moved_cb),
layout);
layout->priv->layout_type = layout_type;
- g_object_unref (project_pane);
- g_object_unref (source_pane);
- brasero_layout_pack_preview (layout);
- g_object_unref (layout->priv->preview_pane);
+ if (source_pane && project_pane) {
+ switch (layout_type) {
+ case BRASERO_LAYOUT_TOP:
+ case BRASERO_LAYOUT_LEFT:
+ gtk_paned_pack2 (GTK_PANED (layout->priv->pane), source_pane, TRUE, FALSE);
+ gtk_paned_pack1 (GTK_PANED (layout->priv->pane), project_pane, TRUE, FALSE);
+ break;
+
+ case BRASERO_LAYOUT_BOTTOM:
+ case BRASERO_LAYOUT_RIGHT:
+ gtk_paned_pack1 (GTK_PANED (layout->priv->pane), source_pane, TRUE, FALSE);
+ gtk_paned_pack2 (GTK_PANED (layout->priv->pane), project_pane, TRUE, FALSE);
+ break;
+
+ default:
+ break;
+ }
+
+ g_object_unref (project_pane);
+ g_object_unref (source_pane);
+ }
+
+ if (layout->priv->preview_pane) {
+ brasero_layout_pack_preview (layout);
+ g_object_unref (layout->priv->preview_pane);
+ }
brasero_layout_size_reallocate (layout);
}
static void
+brasero_layout_HV_radio_button_toggled_cb (GtkRadioAction *radio,
+ GtkRadioAction *current,
+ BraseroLayout *layout);
+
+static void
+brasero_layout_type_changed_cb (GConfClient *client,
+ guint cxn,
+ GConfEntry *entry,
+ gpointer data)
+{
+ GSList *iter;
+ GSList *radios;
+ GtkAction *action;
+ GConfValue *value;
+ BraseroLayoutType layout_type;
+ BraseroLayout *layout = BRASERO_LAYOUT (data);
+
+ value = gconf_entry_get_value (entry);
+ if (value->type != GCONF_VALUE_INT)
+ return;
+
+ layout_type = gconf_value_get_int (value);
+ brasero_layout_change_type (layout, layout_type);
+
+ /* make sure our radio actions reflect the change */
+ action = gtk_action_group_get_action (layout->priv->action_group, "HView");
+
+ radios = gtk_radio_action_get_group (GTK_RADIO_ACTION (action));
+ for (iter = radios; iter; iter = iter->next)
+ g_signal_handlers_block_by_func (iter->data,
+ brasero_layout_HV_radio_button_toggled_cb,
+ layout);
+
+ gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action),
+ GTK_IS_VPANED (layout->priv->pane));
+
+ for (iter = radios; iter; iter = iter->next)
+ g_signal_handlers_unblock_by_func (iter->data,
+ brasero_layout_HV_radio_button_toggled_cb,
+ layout);
+
+ g_slist_free (radios);
+}
+
+static void
+brasero_layout_HV_radio_button_toggled_cb (GtkRadioAction *radio,
+ GtkRadioAction *current,
+ BraseroLayout *layout)
+{
+ guint layout_type;
+
+ if (gtk_radio_action_get_current_value (current))
+ layout_type = BRASERO_LAYOUT_BOTTOM;
+ else
+ layout_type = BRASERO_LAYOUT_RIGHT;
+
+ brasero_layout_change_type (layout, layout_type);
+
+ /* update the GConf key */
+ gconf_client_notify_remove (layout->priv->client,
+ layout->priv->layout_notify);
+ layout->priv->layout_notify = 0;
+
+ gconf_client_set_int (layout->priv->client,
+ BRASERO_KEY_DISPLAY_LAYOUT,
+ layout_type,
+ NULL);
+
+ /* This is to avoid a notification for change */
+ gconf_client_clear_cache (layout->priv->client);
+ layout->priv->layout_notify = gconf_client_notify_add (layout->priv->client,
+ BRASERO_KEY_DISPLAY_LAYOUT,
+ brasero_layout_type_changed_cb,
+ layout,
+ NULL,
+ NULL);
+}
+
+static void
brasero_layout_close_button_clicked_cb (GtkWidget *button,
BraseroLayout *layout)
{
@@ -1199,6 +1287,7 @@
switch (obj->priv->layout_type) {
case BRASERO_LAYOUT_TOP:
case BRASERO_LAYOUT_BOTTOM:
+ g_print ("THIS WAYZS\n");
obj->priv->pane = gtk_vpaned_new ();
break;
@@ -1219,6 +1308,14 @@
gtk_widget_show (obj->priv->pane);
gtk_box_pack_end (GTK_BOX (obj), obj->priv->pane, TRUE, TRUE, 0);
+ /* reflect that layout in the menus */
+ gtk_action_group_add_radio_actions (obj->priv->action_group,
+ radio_entries,
+ sizeof (radio_entries) / sizeof (GtkRadioActionEntry),
+ GTK_IS_VPANED (obj->priv->pane),
+ G_CALLBACK (brasero_layout_HV_radio_button_toggled_cb),
+ obj);
+
/* remember the position */
position = gconf_client_get_int (obj->priv->client,
BRASERO_KEY_DISPLAY_POSITION,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]