[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtkmm
Subject:    Re: gdkmm: how to destroy gdk window?
From:       <krokoziabla () gmail ! com>
Date:       2013-05-12 19:38:35
Message-ID: CAJXE3P6G6FcKZBk2nbVKoy5L_JwjcEeCpGp7TV+Ow7fpjr5USw () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Thank you, Kjell.

Frankly speaking I do not remember why I made my widget pretend windowless.
I've changed the code according to the examples and everything seems to
work now.

But it's really very strange to have such an API. I can think at least of
two issues about it.

First is what if a custom widget has more than one window? It can set one
of them as the widget's window with Widget::set_window() and then when it's
time to unrealise the resources it will be destroyed by Widget::unrealize()
function. But what about the others? Does the user have to destroy them
with direct gdk_window_destroy() call?

The other thought is about the symmetry of the API. The user herself
creates the window with Gdk::Window::create() but then it is supposed to be
destroyed implicitly. It's really not obvious from the documentation. Also
there is a pitfall in GTK+ docs. Although it is not stated in the API
description gtk_widget_realize() and gtk_widget_unrealize() are not really
complete antagonists. I mean if you want to call Gtk::Widget::realize() (or
gtk_widget_realize(), doesn't matter) from you custom widget's on_realize()
method then you can do this only if your widget is windowless. But unlike
realize method it appears that you *have *to call Gtk::Widget::unrealize()
if your widget is both window or no-window widget.

This is just thinking out loud. Maybe GTK+/gtkmm developers will pay
attention to this.

ó Õ×ÁÖÅÎÉÅÍ,
ëÉÒÓÁÎÏ× ÷ÉÔÁÌÉÊ
ICQ: 193259120


2013/4/18 Kjell Ahlstedt <kjell.ahlstedt@bredband.net>

>  Have you looked at the custom widget example in the gtkmm tutorial?
>
>
> https://developer.gnome.org/gtkmm-tutorial/stable/sec-custom-widgets.html.en
>
> https://git.gnome.org/browse/gtkmm-documentation/tree/examples/book/custom/custom_widget/mywidget.cc
>
> Two differences between your code and the custom widget example strike me.
>
> 1. In on_realize() you have set_window(get_parent_window()) instead of
> set_window(_event_window).
>
> 2. In on_unrealize() you have set_realized(false) where the custom widget
> example has Gtk::Widget::on_unrealize().
>    Gtk::Widget::on_unrealize() calls gtk_widget_real_unrealize() which
> among other things calls gdk_window_destroy().
>
> The custom widget example is written for gtkmm3. I don't know if some
> details are different in gtkmm2.
>
> This bug discusses the warning that you get:
> https://bugzilla.gnome.org/show_bug.cgi?id=606903
> I have written some of the comments in that bug, but I don't remember all
> the details now.
>
> Kjell
>
> 2013-04-17 23:01, ÷ÉÔÁÌÉÊ ëÉÒÓÁÎÏ× skrev:
>
>  Please call me an earth worm if I'm using this mailing list
> inapropriately. But maybe somebody can help me.
>
>   *Status quo:* I have a custom widget (MyWidget) with an event window.
> *Problem:* if I create, show and then, later, hide and destroy the widget
> I get the following message from the application:
>
> Gdk-WARNING **: losing last reference to undestroyed window
>
> *What I've found out:* I've had a look in gdkwindow.c file and this
> message is reported whenGDK_WINDOW_DESTROYED(window) == FALSE. So the
> thing I do not understand is how I should destroy my window correctly so
> that eventually gdk_window_destroy() function is called. I thought that
> the best place to call it was the Gdk::~Window() destructor. But it's
> empty. And moreovergdk_window_destroy() is absent in gdkwindow.cc file at
> all.
>
> The on_realize() and on_unrealize() call-backs are below.
>
> class MyWidget : public Gtk::Widget{...private:
>     Glib::RefPtr<Gdk::Window>   _event_window;...};
> void Gtk::MyWidget::on_realize(){
>     GdkWindowAttr       attributes;
>     const Allocation    & allocation = get_allocation();
>
>     attributes.event_mask = GDK_BUTTON_PRESS_MASK;
>
>     attributes.x = allocation.get_x();
>     attributes.y = allocation.get_y();
>     attributes.width = allocation.get_width();
>     attributes.height = allocation.get_height();
>     attributes.wclass = GDK_INPUT_ONLY;
>     attributes.window_type = GDK_WINDOW_CHILD;
>
>     _event_window = Gdk::Window::create(get_parent_window(), &attributes, GDK_WA_X | GDK_WA_Y);
>     _event_window->set_user_data(Widget::gobj());
>
>     set_window(get_parent_window());
>
>     set_realized();}
>
> void Gtk::MyWidget::on_unrealize(){
>     _event_window->set_user_data(NULL);
>     _event_window.reset();
>
>     set_realized(false);}
>
>
>  Best regards,
> Vitaly Kirsanov
> ICQ: 193259120
>
>
>

[Attachment #5 (text/html)]

<div dir="ltr">Thank you, Kjell.<div><br></div><div style>Frankly speaking I do not \
remember why I made my widget pretend windowless. I&#39;ve changed the code according \
to the examples and everything seems to work now.<br> <br>But it&#39;s really very \
strange to have such an API. I can think at least of two issues about \
it.<br><br>First is what if a custom widget has more than one window? It can set one \
of them as the widget&#39;s window with Widget::set_window() and then when it&#39;s \
time to unrealise the resources it will be destroyed by Widget::unrealize() function. \
But what about the others? Does the user have to destroy them with direct \
gdk_window_destroy() call?</div> <div style><br></div><div style>The other thought is \
about the symmetry of the API. The user herself creates the window with \
Gdk::Window::create() but then it is supposed to be destroyed implicitly. It&#39;s \
really not obvious from the documentation. Also there is a pitfall in GTK+ docs. \
Although it is not stated in the API description gtk_widget_realize() and \
gtk_widget_unrealize() are not really complete antagonists. I mean if you want to \
call Gtk::Widget::realize() (or gtk_widget_realize(), doesn&#39;t matter) from you \
custom widget&#39;s on_realize() method then you can do this only if your widget is \
windowless. But unlike realize method it appears that you <b>have </b>to call \
Gtk::Widget::unrealize() if your widget is both window or no-window widget.</div> \
<div style><br></div><div style>This is just thinking out loud. Maybe GTK+/gtkmm \
developers will pay attention to this.</div></div><div class="gmail_extra"><br \
clear="all"><div><div>ó Õ×ÁÖÅÎÉÅÍ,</div>ëÉÒÓÁÎÏ× ÷ÉÔÁÌÉÊ<br>ICQ: 193259120</div>

<br><br><div class="gmail_quote">2013/4/18 Kjell Ahlstedt <span dir="ltr">&lt;<a \
href="mailto:kjell.ahlstedt@bredband.net" \
target="_blank">kjell.ahlstedt@bredband.net</a>&gt;</span><br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Have you looked at the custom widget
      example in the gtkmm tutorial?<br>
      <br>
<a href="https://developer.gnome.org/gtkmm-tutorial/stable/sec-custom-widgets.html.en" \
target="_blank">https://developer.gnome.org/gtkmm-tutorial/stable/sec-custom-widgets.html.en</a><br>
 <a href="https://git.gnome.org/browse/gtkmm-documentation/tree/examples/book/custom/custom_widget/mywidget.cc" \
target="_blank">https://git.gnome.org/browse/gtkmm-documentation/tree/examples/book/custom/custom_widget/mywidget.cc</a><br>


      <br>
      Two differences between your code and the custom widget example
      strike me.<br>
      <br>
      1. In on_realize() you have set_window(get_parent_window())
      instead of set_window(_event_window).<br>
      <br>
      2. In on_unrealize() you have set_realized(false) where the custom
      widget example has Gtk::Widget::on_unrealize().<br>
      šš Gtk::Widget::on_unrealize() calls gtk_widget_real_unrealize()
      which among other things calls gdk_window_destroy().<br>
      <br>
      The custom widget example is written for gtkmm3. I don&#39;t know if
      some details are different in gtkmm2.<br>
      <br>
      This bug discusses the warning that you get:
      <a href="https://bugzilla.gnome.org/show_bug.cgi?id=606903" \
target="_blank">https://bugzilla.gnome.org/show_bug.cgi?id=606903</a><br>  I have \
written some of the comments in that bug, but I don&#39;t  remember all the details \
now.<br>  <br>
      Kjell<br>
      <br>
      2013-04-17 23:01, ÷ÉÔÁÌÉÊ ëÉÒÓÁÎÏ× skrev:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">
        <div>Please call me an earth worm if I&#39;m using this
          mailing list inapropriately. But maybe somebody can help me.</div>
        <div><br>
        </div>
        <div>
          <p>
            <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">Status
  quo:</strong>šI have a custom widget (MyWidget) with an
            event window.<br>
            <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">Problem:</strong>šif
  I create, show and then, later, hide and destroy the widget
            I get the following message from the application:</p>
          <p>
            <code>Gdk-WARNING
              **: losing last reference to undestroyed window</code></p>
          <p>
            <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">What
                
              I&#39;ve found out:</strong>šI&#39;ve had a look \
                inš<code>gdkwindow.c</code>šfile
            and this message is reported when<code>GDK_WINDOW_DESTROYED(window)
              == FALSE</code>. So the thing I do not understand is how I
            should destroy my window correctly so that \
                eventuallyš<code>gdk_window_destroy()</code>šfunction
            is called. I thought that the best place to call it was \
                theš<code>Gdk::~Window()</code>šdestructor.
            But it&#39;s empty. And moreover<code>gdk_window_destroy()</code>šis
            absent inš<code>gdkwindow.cc</code>šfile
            at all.</p>
          <p>
            Theš<code>on_realize()</code>šandš<code>on_unrealize()</code>šcall-backs
            are below.</p>
          <pre style="max-height:600px;width:auto;background-color:rgb(238,238,238);ma \
rgin-bottom:10px;padding:5px;vertical-align:baseline;line-height:18px;font-size:14px;overflow:auto;font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif;margin-top:0px;border:0px"> \
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif"><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">class</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">MyWidget
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">:</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">public</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Gtk</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">Widget</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">{</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">...</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">private</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">:</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Glib</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">RefPtr</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">&lt;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Gdk</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Window</span><span \
style="margin:0px;padding:0px;border:0p \
x;vertical-align:baseline;background-color:transparent">&gt;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
_event_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">...</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">};</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">void</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Gtk</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">MyWidget</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">on_realize</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">()</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">{</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">GdkWindowAttr</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">const</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">&amp;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
allocation </span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span> \
get_allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


    attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">event_mask \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
GDK_BUTTON_PRESS_MASK</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


    attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">x \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_x</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">y \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_y</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">width \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_width</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">height \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
allocation</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_height</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">wclass \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
GDK_INPUT_ONLY</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">window_type \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
GDK_WINDOW_CHILD</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


    _event_window </span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Gdk</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">create</span><span>(</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_parent_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(),</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">&amp;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">attributes</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">,</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
GDK_WA_X </span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transpar \
ent">|</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
GDK_WA_Y</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">);</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  _event_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-&gt;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">set_user_data</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Widget</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">gobj</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">());</span><span>


    set_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">get_parent_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">());</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


    set_realized</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">}</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


</span></code></pre>
          <pre style="max-height:600px;width:auto;background-color:rgb(238,238,238);ma \
rgin-bottom:10px;padding:5px;vertical-align:baseline;line-height:18px;font-size:14px;overflow:auto;font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif;margin-top:0px;border:0px"> \
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif"><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"><div \
style="margin:0px 5px 5px \
0px;padding:0px;border:0px;vertical-align:baseline;background-color:rgb(255,255,255);width:660px;font-family:Arial,&#39;Liberation \
Sans&#39;,&#39;DejaVu Sans&#39;,sans-serif;white-space:normal">

<pre style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;vertical-align:ba \
seline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier \
New&#39;,monospace,serif;overflow:auto;width:auto;max-height:600px"> <code \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,&#39;Lucida \
Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera \
Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif"><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">void</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> \
</span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">Gtk</span><span>::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">MyWidget</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">on_unrealize</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">()</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">{</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  _event_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-&gt;</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">set_user_data</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">NULL</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">);</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
  _event_window</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">reset</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">();</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">


    set_realized</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">false</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">);</span><span \
style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
 </span><span style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">}</span></code></pre></div></span></code></pre>
  </div>
        <br clear="all">
        <div>
          <div>Best regards,</div>
          <div>Vitaly Kirsanov</div>
          ICQ: 193259120</div>
      </div>
      <br>
    </blockquote>
    <br>
  </div>

</blockquote></div><br></div>



_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic