X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fgtkmm2ext%2Fpopup.cc;h=898211c986489d2e0a10d16b258fb7a99252041e;hb=569167a603ef812a234d3c02f6a94976571a70ea;hp=a8ffc4af669526baaca8ec481899d5dc36e6a842;hpb=26843b34fdd62e6f80630868c5eb3f8fee0c17f1;p=ardour.git diff --git a/libs/gtkmm2ext/popup.cc b/libs/gtkmm2ext/popup.cc index a8ffc4af66..898211c986 100644 --- a/libs/gtkmm2ext/popup.cc +++ b/libs/gtkmm2ext/popup.cc @@ -1,6 +1,6 @@ /* Copyright (C) 1998-99 Paul Barton-Davis - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -22,6 +22,7 @@ #include #include +#include using namespace std; using namespace Gtk; @@ -74,35 +75,43 @@ PopUp::remove () hide (); if (popdown_time != 0 && timeout != -1) { - gtk_timeout_remove (timeout); + g_source_remove (timeout); } if (delete_on_hide) { std::cerr << "deleting prompter\n"; - gtk_idle_add (idle_delete, this); + g_idle_add (idle_delete, this); } } +#define ENSURE_GUI_THREAD(slot) \ + if (!Gtkmm2ext::UI::instance()->caller_is_ui_thread()) {\ + Gtkmm2ext::UI::instance()->call_slot (MISSING_INVALIDATOR, (slot)); \ + return;\ + } + void PopUp::touch () { + ENSURE_GUI_THREAD (mem_fun (*this, &PopUp::touch)); + if (is_visible ()) { remove (); } else { set_size_request_to_display_given_text (label, my_text.c_str(), 25, 10); label.set_text (my_text); show_all (); - + if (popdown_time != 0) { - timeout = gtk_timeout_add (popdown_time, - remove_prompt_timeout, + timeout = g_timeout_add (popdown_time, + remove_prompt_timeout, this); } } } gint -PopUp::button_click (GdkEventButton *ev) +PopUp::button_click (GdkEventButton* /*ev*/) { remove (); return TRUE; @@ -122,17 +131,17 @@ PopUp::set_name (string name) } bool -PopUp::on_delete_event (GdkEventAny* ev) +PopUp::on_delete_event (GdkEventAny* /*ev*/) { hide(); if (popdown_time != 0 && timeout != -1) { - gtk_timeout_remove (timeout); - } + g_source_remove (timeout); + } if (delete_on_hide) { std::cerr << "deleting prompter\n" << endl; - gtk_idle_add (idle_delete, this); + g_idle_add (idle_delete, this); } return true;