From 59912a57cf41cd4cd46582e7d29f5b3bfb1b8491 Mon Sep 17 00:00:00 2001 From: Andrzej Date: Fri, 24 Feb 2012 16:30:00 +0900 Subject: [PATCH] Compatibility fix with panel 4.9+ and updating the size after orientation change. --- generic-slider.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/generic-slider.c b/generic-slider.c index dd01563..d7b2359 100644 --- a/generic-slider.c +++ b/generic-slider.c @@ -543,6 +543,52 @@ static void generic_slider_properties_dialog(XfcePanelPlugin *plugin, Generic_Sl gtk_widget_show_all(dialog); } +#if defined (LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION (4,9,0) +static void generic_slider_mode_changed(XfcePanelPlugin *plugin, XfcePanelPluginMode mode, Generic_Slider *generic_slider) { + GtkWidget *slider = generic_slider -> slider; + GtkWidget *label = generic_slider -> label; + GtkWidget *box = gtk_widget_get_ancestor(label, GTK_TYPE_BOX); + GtkWidget *event_box = gtk_widget_get_ancestor(slider, GTK_TYPE_EVENT_BOX); + GtkWidget *aligned_box = gtk_container_get_children(GTK_CONTAINER(event_box)) -> data; + GtkWidget *new_box; + + if (mode != XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) { + new_box = gtk_vbox_new(FALSE, 0); + gtk_alignment_set(GTK_ALIGNMENT(aligned_box), 0.5, 0.5, 0.0, 1.0); + gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(slider), GTK_PROGRESS_LEFT_TO_RIGHT); + gtk_widget_set_size_request(slider, -1, WIDTH); + gtk_widget_set_size_request(GTK_WIDGET(plugin), xfce_panel_plugin_get_size(plugin), -1); + } else { + new_box = gtk_hbox_new(FALSE, 0); + gtk_alignment_set(GTK_ALIGNMENT(aligned_box), 0.5, 0.5, 1.0, 0.0); + gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(slider), GTK_PROGRESS_BOTTOM_TO_TOP); + gtk_widget_set_size_request(slider, WIDTH, -1); + gtk_widget_set_size_request(GTK_WIDGET(plugin), -1, xfce_panel_plugin_get_size(plugin)); + } + + if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL) { + gtk_label_set_angle(GTK_LABEL(label), 270); + } else { + gtk_label_set_angle(GTK_LABEL(label), 0); + } + + gtk_widget_ref(label); + gtk_container_remove(GTK_CONTAINER(box), label); + gtk_box_pack_start(GTK_BOX(new_box), label, FALSE, FALSE, 0); + gtk_widget_ref(slider); + gtk_container_remove(GTK_CONTAINER(box), slider); + gtk_box_pack_start(GTK_BOX(new_box), slider, FALSE, FALSE, 0); + gtk_widget_destroy(box); + gtk_container_add(GTK_CONTAINER(aligned_box), new_box); + gtk_widget_show_all(aligned_box); + if ((generic_slider -> mode) == 1) { + gtk_widget_hide(label); + } else if ((generic_slider -> mode) == 2) { + gtk_widget_hide(slider); + } +} + +#else static void generic_slider_orientation_changed(XfcePanelPlugin *plugin, GtkOrientation orientation, Generic_Slider *generic_slider) { GtkWidget *slider = generic_slider -> slider; GtkWidget *label = generic_slider -> label; @@ -556,11 +602,13 @@ static void generic_slider_orientation_changed(XfcePanelPlugin *plugin, GtkOrien gtk_alignment_set(GTK_ALIGNMENT(aligned_box), 0.5, 0.5, 0.0, 1.0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(slider), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_size_request(slider, -1, WIDTH); + gtk_widget_set_size_request(GTK_WIDGET(plugin), xfce_panel_plugin_get_size(plugin), -1); } else { new_box = gtk_hbox_new(FALSE, 0); gtk_alignment_set(GTK_ALIGNMENT(aligned_box), 0.5, 0.5, 1.0, 0.0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(slider), GTK_PROGRESS_BOTTOM_TO_TOP); gtk_widget_set_size_request(slider, WIDTH, -1); + gtk_widget_set_size_request(GTK_WIDGET(plugin), -1, xfce_panel_plugin_get_size(plugin)); } gtk_widget_ref(label); @@ -578,6 +626,7 @@ static void generic_slider_orientation_changed(XfcePanelPlugin *plugin, GtkOrien gtk_widget_hide(slider); } } +#endif static gboolean generic_slider_set_size(XfcePanelPlugin *plugin, int size) { if (xfce_panel_plugin_get_orientation(plugin) == GTK_ORIENTATION_HORIZONTAL) { @@ -768,7 +817,11 @@ static void generic_slider_construct(XfcePanelPlugin *plugin) { xfce_panel_plugin_menu_show_configure (plugin); g_signal_connect(plugin, "configure-plugin", G_CALLBACK(generic_slider_properties_dialog), generic_slider); +#if defined (LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION (4,9,0) + g_signal_connect(plugin, "mode-changed", G_CALLBACK (generic_slider_mode_changed), generic_slider); +#else g_signal_connect(plugin, "orientation-changed", G_CALLBACK(generic_slider_orientation_changed), generic_slider); +#endif g_signal_connect(plugin, "size-changed", G_CALLBACK(generic_slider_set_size), NULL); g_signal_connect(plugin, "free-data", G_CALLBACK(generic_slider_free_data), generic_slider); g_signal_connect(plugin, "save", G_CALLBACK(generic_slider_write_rc_file), generic_slider); -- 1.7.5.4