summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-07 18:29:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-06-07 18:29:03 -0400
commit73f3abedea6f6ec112f26fe810ad6a7ec56a1e2e (patch)
treed5a7c5ffd12b0ba759a3c278d753f5321979fbb6 /libs
parent207fa93cf948cc2b9d92e50ef15707611a858d6a (diff)
make it possible to disable VisibilityTracker's use of WM visibility
Diffstat (limited to 'libs')
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h5
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/window_proxy.h1
-rw-r--r--libs/gtkmm2ext/keyboard.cc5
-rw-r--r--libs/gtkmm2ext/tabbable.cc1
-rw-r--r--libs/gtkmm2ext/visibility_tracker.cc27
5 files changed, 34 insertions, 5 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h
index 43f5b247ed..8860aba441 100644
--- a/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h
+++ b/libs/gtkmm2ext/gtkmm2ext/visibility_tracker.h
@@ -35,6 +35,8 @@ class LIBGTKMM2EXT_API VisibilityTracker : public virtual sigc::trackable {
VisibilityTracker (Gtk::Window&);
virtual ~VisibilityTracker() {}
+ static void set_use_window_manager_visibility (bool);
+ static bool use_window_manager_visibility() { return _use_window_manager_visibility; }
void cycle_visibility ();
bool fully_visible() const;
@@ -46,6 +48,9 @@ class LIBGTKMM2EXT_API VisibilityTracker : public virtual sigc::trackable {
private:
Gtk::Window& _window;
GdkVisibilityState _visibility;
+
+ static bool _use_window_manager_visibility;
+
bool handle_visibility_notify_event (GdkEventVisibility*);
};
diff --git a/libs/gtkmm2ext/gtkmm2ext/window_proxy.h b/libs/gtkmm2ext/gtkmm2ext/window_proxy.h
index 13c3486bdf..52ccfc8c42 100644
--- a/libs/gtkmm2ext/gtkmm2ext/window_proxy.h
+++ b/libs/gtkmm2ext/gtkmm2ext/window_proxy.h
@@ -96,6 +96,7 @@ class LIBGTKMM2EXT_API WindowProxy : public PBD::StatefulDestructible, public vi
sigc::connection delete_connection;
sigc::connection configure_connection;
+
void save_pos_and_size ();
void set_pos_and_size ();
void set_pos ();
diff --git a/libs/gtkmm2ext/keyboard.cc b/libs/gtkmm2ext/keyboard.cc
index 983edbd0cf..08b0393d49 100644
--- a/libs/gtkmm2ext/keyboard.cc
+++ b/libs/gtkmm2ext/keyboard.cc
@@ -477,6 +477,7 @@ Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* /*win*/)
current_window = 0;
}
} else {
+ DEBUG_TRACE (DEBUG::Keyboard, "LEAVE window without event\n");
current_window = 0;
}
@@ -498,7 +499,9 @@ Keyboard::focus_out_window (GdkEventFocus * ev, Gtk::Window* win)
state.clear ();
current_window = 0;
} else {
- current_window = 0;
+ if (win == current_window) {
+ current_window = 0;
+ }
}
DEBUG_TRACE (DEBUG::Keyboard, string_compose ("Foucusing out window, title = %1\n", win->get_title()));
diff --git a/libs/gtkmm2ext/tabbable.cc b/libs/gtkmm2ext/tabbable.cc
index b84de2b10d..9aa1c3fe5f 100644
--- a/libs/gtkmm2ext/tabbable.cc
+++ b/libs/gtkmm2ext/tabbable.cc
@@ -304,6 +304,7 @@ Tabbable::show_tab ()
add_to_notebook (*_parent_notebook, _tab_title);
}
_parent_notebook->set_current_page (_parent_notebook->page_num (_contents));
+ current_toplevel()->present ();
}
}
diff --git a/libs/gtkmm2ext/visibility_tracker.cc b/libs/gtkmm2ext/visibility_tracker.cc
index aac76a5021..170036eac1 100644
--- a/libs/gtkmm2ext/visibility_tracker.cc
+++ b/libs/gtkmm2ext/visibility_tracker.cc
@@ -23,6 +23,8 @@
using namespace Gtkmm2ext;
+bool VisibilityTracker::_use_window_manager_visibility = true;
+
VisibilityTracker::VisibilityTracker (Gtk::Window& win)
: _window (win)
, _visibility (GdkVisibilityState (0))
@@ -31,11 +33,16 @@ VisibilityTracker::VisibilityTracker (Gtk::Window& win)
_window.signal_visibility_notify_event().connect (sigc::mem_fun (*this, &VisibilityTracker::handle_visibility_notify_event));
}
+void
+VisibilityTracker::set_use_window_manager_visibility (bool yn)
+{
+ _use_window_manager_visibility = yn;
+}
+
bool
VisibilityTracker::handle_visibility_notify_event (GdkEventVisibility* ev)
{
_visibility = ev->state;
- // std::cerr << "VT: " << _window.get_title() << " vis event, fv = " << fully_visible() << " pv = " << partially_visible() << " nv = " << not_visible() << std::endl;
return false;
}
@@ -52,17 +59,29 @@ VisibilityTracker::cycle_visibility ()
bool
VisibilityTracker::fully_visible () const
{
- return _window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED);
+ if (_use_window_manager_visibility) {
+ return _window.is_mapped() && (_visibility == GDK_VISIBILITY_UNOBSCURED);
+ } else {
+ return _window.is_mapped();
+ }
}
bool
VisibilityTracker::not_visible () const
{
- return !_window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED);
+ if (_use_window_manager_visibility) {
+ return !_window.is_mapped() || (_visibility == GDK_VISIBILITY_FULLY_OBSCURED);
+ } else {
+ return !_window.is_mapped();
+ }
}
bool
VisibilityTracker::partially_visible () const
{
- return _window.is_mapped() && ((_visibility == GDK_VISIBILITY_PARTIAL) || (_visibility == GDK_VISIBILITY_UNOBSCURED));
+ if (_use_window_manager_visibility) {
+ return _window.is_mapped() && ((_visibility == GDK_VISIBILITY_PARTIAL) || (_visibility == GDK_VISIBILITY_UNOBSCURED));
+ } else {
+ return _window.is_mapped();
+ }
}