15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_GTK_PRESERVE_WINDOW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_GTK_PRESERVE_WINDOW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atk/atk.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <gdk/gdk.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <gtk/gtk.h>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GtkFixed creates an X window when realized and destroys an X window
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// when unrealized. GtkPreserveWindow allows overrides this
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// behaviour. When preserve is set (via gtk_preserve_window_set_preserve),
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the X window is only destroyed when the widget is destroyed.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)G_BEGIN_DECLS
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_TYPE_PRESERVE_WINDOW                                 \
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (gtk_preserve_window_get_type())
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_PRESERVE_WINDOW(obj)                                 \
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_PRESERVE_WINDOW, \
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                GtkPreserveWindow))
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_PRESERVE_WINDOW_CLASS(klass)                         \
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_PRESERVE_WINDOW,  \
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             GtkPreserveWindowClass))
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_IS_PRESERVE_WINDOW(obj)                              \
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_PRESERVE_WINDOW))
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_IS_PRESERVE_WINDOW_CLASS(klass)                      \
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_PRESERVE_WINDOW))
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GTK_PRESERVE_WINDOW_GET_CLASS(obj)                       \
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_PRESERVE_WINDOW,  \
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               GtkPreserveWindowClass))
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GtkPreserveWindow GtkPreserveWindow;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GtkPreserveWindowClass GtkPreserveWindowClass;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _GtkPreserveWindow {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parent class.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkFixed fixed;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _GtkPreserveWindowClass {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkFixedClass parent_class;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT GType gtk_preserve_window_get_type() G_GNUC_CONST;
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT GtkWidget* gtk_preserve_window_new();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whether or not we should preserve associated windows as the widget
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is realized or unrealized.
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT gboolean gtk_preserve_window_get_preserve(GtkPreserveWindow* widget);
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT void gtk_preserve_window_set_preserve(GtkPreserveWindow* widget,
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                                 gboolean value);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whether or not someone else will gdk_window_resize the GdkWindow associated
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with this widget (needed by the GPU process to synchronize resizing
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with swapped between front and back buffer).
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT void gtk_preserve_window_delegate_resize(GtkPreserveWindow* widget,
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                                    gboolean delegate);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provide a function to return an AtkObject* when calls to get_accessible
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are made on this widget. The parameter |userdata| will be passed to the
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// factory function.
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GFX_EXPORT void gtk_preserve_window_set_accessible_factory(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GtkPreserveWindow* widget,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AtkObject* (*factory)(void* userdata),
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gpointer userdata);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)G_END_DECLS
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_GTK_PRESERVE_WINDOW_H_
75