Re: Program suddenly quits after hiding Gtk::Window(Gtk::WINDOW_POPUP) (Attachment included)



Hi Kjell,

Thank you for your response. Your answer works perfectly fine. The popup window displayed & hided as expected. 

But I also want to propose another solution that I have found to work quite well too, so people that later visit this thread will be aware of this. 

I found out that Gtk::WINDOW_POPUP does not need to be in a Gtk::Main::run() to be shown. I can just call show() & hide() without calling the Gtk::Main::run() on the d_popup_win since calling Gtk::Main::run() on d_popup_win plus calling hide() will make the main loop stop & the whole program quit.

So my solution was not to call Gtk::Main::run(d_popup_win) at all and instead just call d_popup_win.show() & d_popup_win.hide() when I need to show & hide d_popup_win, since d_popup_win is only a Gtk::WINDOW_POPUP and it only serves as a container for the control widgets of the fullscreen() mode. 

On Wed, Nov 23, 2011 at 5:01 AM, Kjell Ahlstedt <kjell ahlstedt bredband net> wrote:
2011-11-21 13:01, Phong Cao skrev:
Hello everybody,

I am writing a small media player that allows the users to click on Gtk::DrawingArea to switch to fullscreen() or unfullscreen() mode, as well as hide() or show() a popup window (which is used to put play/pause/stop/progress widgets on top to control the progress of the video)
- When the users do a double right-click, the main window will be fullscreen() or unfullscreen().
- If the users do a right-click, and the window is in fullscreen() mode, the popup window will be hide() or show().

However, whenever I switch to fullscreen() mode (which also show() the popup window), then right-click 3 times (hide(), show(), then hide() the popup window), the whole program suddenly quits. I dont know why this happens and whether this is because of me.

I already attached the source code of the program with this email. If you can please download and see what I did wrong. 

Just uncompress it & run `make` to compile. My program uses gtkmm-3.0

Thank you for reading my message! Have a good Thanksgiving!

Best regards,

--
Phong V. Cao
You need one Gtk::Main::run(d_popup_win) for each d_popup_win.hide(), otherwise the main loop that was started by Gtk::Main::run(topwin) in main.cc ends. Add a line in TopWin::onDrawingAreaClicked:

else if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) {
    if (is_fullscreen) {
    // if we are in fullscreen mode...
   
      if (is_hide) {
        // ...and d_popup_win is hidden then show d_popup_win
        d_popup_win.show();
        is_hide = false;

      Gtk::Main::run(d_popup_win); // !!! added
      }

A question that you don't have to answer: Are you really sure you don't want to use a Gtk::Dialog instead?

Kjell Ahlstedt



--
Phong V. Cao
phngcv gmail com




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]