ardour
ardour_dialog.cc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 
18 */
19 
20 #include <iostream>
21 #include <sigc++/bind.h>
22 
23 #include <gtkmm2ext/doi.h>
24 
25 #include "ardour_dialog.h"
26 #include "ardour_ui.h"
27 #include "keyboard.h"
28 #include "splash.h"
29 #include "utils.h"
30 #include "window_manager.h"
31 
32 using namespace std;
33 using namespace Gtk;
34 using namespace Gtkmm2ext;
35 using namespace ARDOUR_UI_UTILS;
36 
37 ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator)
38  : Dialog (title, modal, use_seperator)
39  , proxy (0)
40  , _splash_pushed (false)
41 {
42  init ();
43  set_position (Gtk::WIN_POS_CENTER);
44 }
45 
46 ArdourDialog::ArdourDialog (Gtk::Window& parent, string title, bool modal, bool use_seperator)
47  : Dialog (title, parent, modal, use_seperator)
48  , _splash_pushed (false)
49 {
50  init ();
51  set_position (Gtk::WIN_POS_CENTER_ON_PARENT);
52 }
53 
55 {
56  if (_splash_pushed) {
57  Splash* spl = Splash::instance();
58 
59  if (spl) {
60  spl->pop_front();
61  }
62  }
64 }
65 
66 bool
68 {
69  Keyboard::the_keyboard().focus_in_window (ev, this);
70  return Dialog::on_focus_in_event (ev);
71 }
72 
73 bool
75 {
76  if (!get_modal()) {
77  Keyboard::the_keyboard().focus_out_window (ev, this);
78  }
79  return Dialog::on_focus_out_event (ev);
80 }
81 
82 void
84 {
85  Keyboard::the_keyboard().leave_window (0, this);
86  Dialog::on_unmap ();
87 }
88 
89 void
91 {
92  Dialog::on_show ();
93 
94  // never allow the splash screen to obscure any dialog
95 
96  Splash* spl = Splash::instance();
97 
98  if (spl && spl->is_visible()) {
99  spl->pop_back_for (*this);
100  _splash_pushed = true;
101  }
102 }
103 
104 bool
106 {
107  hide ();
108  return false;
109 }
110 
111 void
113 {
114  set_border_width (10);
115  add_events (Gdk::FOCUS_CHANGE_MASK);
116  set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
117 
118  Gtk::Window* parent = WM::Manager::instance().transient_parent();
119 
120  if (parent) {
121  set_transient_for (*parent);
122  }
123 
124  ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL));
125 
126  proxy = new WM::ProxyTemporary (get_title(), this);
128 }
static Splash * instance()
Definition: splash.h:39
void pop_front()
Definition: splash.cc:125
ArdourDialog(std::string title, bool modal=false, bool use_separator=false)
Definition: ardour_ui.h:130
static Manager & instance()
Definition: Beats.hpp:239
void register_window(ProxyBase *)
Definition: splash.h:33
WM::ProxyTemporary * proxy
Definition: ardour_dialog.h:52
bool on_focus_out_event(GdkEventFocus *)
void remove(const ProxyBase *)
bool _splash_pushed
Definition: ardour_dialog.h:53
static sigc::signal< void > CloseAllDialogs
Definition: ardour_ui.h:213
Gtk::Window * transient_parent() const
bool on_delete_event(GdkEventAny *)
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
Definition: globals.cc:376
bool on_focus_in_event(GdkEventFocus *)
void pop_back_for(Gtk::Window &)
Definition: splash.cc:101