From a64bc0233358d695d3424fe4eac941d7282d11a7 Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: Sep 03 2018 15:44:01 +0000 Subject: Fix gtk compatibility for Gtk::Adjustment --- diff --git a/synfig-studio/src/gui/app.cpp b/synfig-studio/src/gui/app.cpp index c76e0d9..8fe4678 100644 --- a/synfig-studio/src/gui/app.cpp +++ b/synfig-studio/src/gui/app.cpp @@ -3372,7 +3372,7 @@ App::dialog_message_3b(const std::string &message, static bool try_open_uri(const std::string &uri) { -#ifdef GTK_CHECK_VERSION(3, 22, 0) +#if GTK_CHECK_VERSION(3, 22, 0) return gtk_show_uri_on_window( App::main_window ? App::main_window->gobj() : NULL, uri.c_str(), GDK_CURRENT_TIME, NULL ); diff --git a/synfig-studio/src/gui/docks/dock_timetrack.cpp b/synfig-studio/src/gui/docks/dock_timetrack.cpp index 08a4de6..4230468 100644 --- a/synfig-studio/src/gui/docks/dock_timetrack.cpp +++ b/synfig-studio/src/gui/docks/dock_timetrack.cpp @@ -38,7 +38,7 @@ #include #include -#include +#include #include #include #include @@ -50,6 +50,7 @@ #include "dock_timetrack.h" +#include #endif @@ -158,29 +159,23 @@ public: switch(event->type) { case GDK_SCROLL: - if(mimic_tree_view) - { + if (mimic_tree_view) { if(event->scroll.direction==GDK_SCROLL_DOWN) - { - mimic_tree_view->get_vadjustment()->set_value( - std::min( - mimic_tree_view->get_vadjustment()->get_value()+ - mimic_tree_view->get_vadjustment()->get_step_increment(), - mimic_tree_view->get_vadjustment()->get_upper()- - mimic_tree_view->get_vadjustment()->get_page_size() - ) - ); - } - else if(event->scroll.direction==GDK_SCROLL_UP) - { - mimic_tree_view->get_vadjustment()->set_value( - std::max( - mimic_tree_view->get_vadjustment()->get_value()- - mimic_tree_view->get_vadjustment()->get_step_increment(), - mimic_tree_view->get_vadjustment()->get_lower() - ) - ); - } + ConfigureAdjustment(mimic_tree_view->get_vadjustment()) + .set_value( std::min( + mimic_tree_view->get_vadjustment()->get_value() + + mimic_tree_view->get_vadjustment()->get_step_increment(), + mimic_tree_view->get_vadjustment()->get_upper() + - mimic_tree_view->get_vadjustment()->get_page_size() )) + .finish(); + else + if(event->scroll.direction==GDK_SCROLL_UP) + ConfigureAdjustment(mimic_tree_view->get_vadjustment()) + .set_value( std::max( + mimic_tree_view->get_vadjustment()->get_value() + - mimic_tree_view->get_vadjustment()->get_step_increment(), + mimic_tree_view->get_vadjustment()->get_lower() )) + .finish(); } break; case GDK_BUTTON_PRESS: @@ -360,8 +355,10 @@ public: Glib::RefPtr adjustment(mimic_tree_view->get_vadjustment()); set_vadjustment(adjustment); - if(adjustment->get_page_size()>get_height()) - adjustment->set_page_size(get_height()); + if (adjustment->get_page_size()>get_height()) + ConfigureAdjustment(adjustment) + .set_page_size(get_height()) + .finish(); /* Commented during Align rows fixing // http://www.synfig.org/issues/thebuggenie/synfig/issues/161 int row_height = 0; diff --git a/synfig-studio/src/gui/helpers.cpp b/synfig-studio/src/gui/helpers.cpp index f55a4e5..9be2044 100644 --- a/synfig-studio/src/gui/helpers.cpp +++ b/synfig-studio/src/gui/helpers.cpp @@ -29,6 +29,8 @@ # include #endif +#include + #include #include "helpers.h" @@ -48,5 +50,18 @@ using namespace studio; /* === P R O C E D U R E S ================================================= */ +static bool +is_old_gtk_adjustment() { + static bool is_old = gtk_check_version(3, 18, 0) != NULL; + return is_old; +} + /* === M E T H O D S ======================================================= */ +void +ConfigureAdjustment::emit_changed() + { if (is_old_gtk_adjustment()) adjustment->changed(); } + +void +ConfigureAdjustment::emit_value_changed() +{ if (is_old_gtk_adjustment()) adjustment->value_changed(); } diff --git a/synfig-studio/src/gui/helpers.h b/synfig-studio/src/gui/helpers.h index 2cccac7..fe29c67 100644 --- a/synfig-studio/src/gui/helpers.h +++ b/synfig-studio/src/gui/helpers.h @@ -81,6 +81,12 @@ public: double precision; +private: + // for compatibility with old gtk + void emit_changed(); + void emit_value_changed(); + +public: explicit ConfigureAdjustment(const Glib::RefPtr &adjustment = Glib::RefPtr()): adjustment(adjustment), value(), @@ -155,10 +161,14 @@ public: || !is_equal(step_increment, adjustment->get_step_increment()) || !is_equal(page_increment, adjustment->get_page_increment()) || !is_equal(page_size, adjustment->get_page_size()) ) + { adjustment->configure(value, lower, upper, step_increment, page_increment, page_size); - else - if (!is_equal(value, adjustment->get_value())) + emit_changed(); + } else + if (!is_equal(value, adjustment->get_value())) { adjustment->set_value(value); + emit_value_changed(); + } adjustment.reset(); } diff --git a/synfig-studio/src/gui/preview.cpp b/synfig-studio/src/gui/preview.cpp index 53dafb4..681a47c 100644 --- a/synfig-studio/src/gui/preview.cpp +++ b/synfig-studio/src/gui/preview.cpp @@ -49,14 +49,15 @@ #include "asyncrenderer.h" #include "canvasview.h" -#include - #include #include #include #include #include #include +#include + +#include #endif @@ -832,7 +833,9 @@ bool studio::Widget_Preview::play_update() } //set the new time... - adj_time_scrub->set_value(time); + ConfigureAdjustment(adj_time_scrub) + .set_value(time) + .finish(); //update the window to the correct image we might want to do this later... //update(); @@ -857,8 +860,9 @@ void studio::Widget_Preview::scrub_updated(double t) //synfig::info("Scrubbing to %.3f, setting adj to %.3f",oldt,t); - if(adj_time_scrub->get_value() != t) - adj_time_scrub->set_value(t); + ConfigureAdjustment(adj_time_scrub) + .set_value(t) + .finish(); } void studio::Widget_Preview::disconnect_preview(Preview *prev) diff --git a/synfig-studio/src/gui/widgets/widget_curves.cpp b/synfig-studio/src/gui/widgets/widget_curves.cpp index ec4796e..6c938f3 100644 --- a/synfig-studio/src/gui/widgets/widget_curves.cpp +++ b/synfig-studio/src/gui/widgets/widget_curves.cpp @@ -307,10 +307,14 @@ Widget_Curves::on_event(GdkEvent *event) case GDK_SCROLL_RIGHT: { if (event->scroll.state & GDK_CONTROL_MASK) { // Ctrl+scroll , perform zoom in - range_adjustment->set_page_size(range_adjustment->get_page_size()/1.25); + ConfigureAdjustment(range_adjustment) + .set_page_size(range_adjustment->get_page_size()/1.25) + .finish(); } else { // Scroll up - range_adjustment->set_value(range_adjustment->get_value() - range_adjustment->get_step_increment()); + ConfigureAdjustment(range_adjustment) + .set_value(range_adjustment->get_value() - range_adjustment->get_step_increment()) + .finish(); } return true; } @@ -318,10 +322,14 @@ Widget_Curves::on_event(GdkEvent *event) case GDK_SCROLL_LEFT: { if (event->scroll.state & GDK_CONTROL_MASK) { // Ctrl+scroll , perform zoom out - range_adjustment->set_page_size(range_adjustment->get_page_size()*1.25); + ConfigureAdjustment(range_adjustment) + .set_page_size(range_adjustment->get_page_size()*1.25) + .finish(); } else { // Scroll down - range_adjustment->set_value(range_adjustment->get_value() + range_adjustment->get_step_increment()); + ConfigureAdjustment(range_adjustment) + .set_value(range_adjustment->get_value() + range_adjustment->get_step_increment()) + .finish(); } return true; }