summaryrefslogtreecommitdiffstats
path: root/client/x11/red_window_p.h
blob: 9a1c77f861ec729a97cf6fde48776b2763952f24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
   Copyright (C) 2009 Red Hat, Inc.

   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 (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _H_RED_WINDOW_P
#define _H_RED_WINDOW_P

#include <GL/glx.h>
#include <X11/Xlib.h>

typedef Window Win;
typedef GLXContext RedGlContext;
typedef GLXPbuffer RedPbuffer;

class RedWindow;
class Icon;
struct PixelsSource_p;

class RedWindow_p {
public:
    RedWindow_p();

    void migrate(RedWindow& red_window, PixelsSource_p& pix_source, int dest_screen);
    void create(RedWindow& red_window, PixelsSource_p& pix_source, int x, int y,
                unsigned int width, unsigned int height, int in_screen);
    void destroy(RedWindow& red_window, PixelsSource_p& pix_source);
    void set_minmax(PixelsSource_p& pix_source, int width, int height);
    void wait_for_reparent();
    void wait_for_map();
    void wait_for_unmap();
    void sync(bool shadowed = false);
    void set_visibale(bool vis) { _visibale = vis;}
    void move_to_current_desktop();
    Window get_window() {return _win;}

    static void win_proc(XEvent& event);
    static Cursor create_invisible_cursor(Window window);

    void set_glx(int width, int height);
    static void handle_key_press_event(RedWindow& red_window, XKeyEvent* event);

protected:
    int _screen;
    Window _win;
    Cursor _invisible_cursor;
    bool _visibale;
    bool _expect_parent;
    SpicePoint _show_pos;
    GLXContext _glcont_copy;
    Icon* _icon;
    bool _focused;
    bool _ignore_foucs;
    bool _shadow_foucs_state;
    XEvent _shadow_focus_event;
    bool _pointer_in_window;
    bool _ignore_pointer;
    bool _shadow_pointer_state;
    XEvent _shadow_pointer_event;
    Colormap _colormap;
};

#endif