put in hack to keep Pango from mangling our server grab and locking up on
2002-02-19 Havoc Pennington <hp@pobox.com> * src/ui.c (meta_ui_init): put in hack to keep Pango from mangling our server grab and locking up on startup. (hack doesn't work but I want to fix it on my real computer not this laptop) * src/window.c: Implement _NET_WM_STATE_FULLSCREEN * src/display.c (meta_display_open): add atoms for _NET_WM_STATE_FULLSCREEN
This commit is contained in:
parent
214ac20a69
commit
20218dac92
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2002-02-19 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/ui.c (meta_ui_init): put in hack to keep Pango from mangling
|
||||||
|
our server grab and locking up on startup. (hack doesn't work
|
||||||
|
but I want to fix it on my real computer not this laptop)
|
||||||
|
|
||||||
|
* src/window.c: Implement _NET_WM_STATE_FULLSCREEN
|
||||||
|
|
||||||
|
* src/display.c (meta_display_open): add atoms for
|
||||||
|
_NET_WM_STATE_FULLSCREEN
|
||||||
|
|
||||||
2002-02-16 Kjartan Maraas <kmaraas@gnome.org>
|
2002-02-16 Kjartan Maraas <kmaraas@gnome.org>
|
||||||
|
|
||||||
* src/main.c: Use bind_textdomain_codeset etc.
|
* src/main.c: Use bind_textdomain_codeset etc.
|
||||||
|
@ -146,7 +146,8 @@ meta_display_open (const char *name)
|
|||||||
"_METACITY_SET_KEYBINDINGS_MESSAGE",
|
"_METACITY_SET_KEYBINDINGS_MESSAGE",
|
||||||
"_NET_WM_STATE_HIDDEN",
|
"_NET_WM_STATE_HIDDEN",
|
||||||
"_NET_WM_WINDOW_TYPE_UTILITY",
|
"_NET_WM_WINDOW_TYPE_UTILITY",
|
||||||
"_NET_WM_WINDOW_TYPE_SPLASHSCREEN"
|
"_NET_WM_WINDOW_TYPE_SPLASHSCREEN",
|
||||||
|
"_NET_WM_STATE_FULLSCREEN"
|
||||||
};
|
};
|
||||||
Atom atoms[G_N_ELEMENTS(atom_names)];
|
Atom atoms[G_N_ELEMENTS(atom_names)];
|
||||||
|
|
||||||
@ -247,6 +248,7 @@ meta_display_open (const char *name)
|
|||||||
display->atom_net_wm_state_hidden = atoms[49];
|
display->atom_net_wm_state_hidden = atoms[49];
|
||||||
display->atom_net_wm_window_type_utility = atoms[50];
|
display->atom_net_wm_window_type_utility = atoms[50];
|
||||||
display->atom_net_wm_window_type_splashscreen = atoms[51];
|
display->atom_net_wm_window_type_splashscreen = atoms[51];
|
||||||
|
display->atom_net_wm_state_fullscreen = atoms[52];
|
||||||
|
|
||||||
/* Offscreen unmapped window used for _NET_SUPPORTING_WM_CHECK,
|
/* Offscreen unmapped window used for _NET_SUPPORTING_WM_CHECK,
|
||||||
* created in screen_new
|
* created in screen_new
|
||||||
|
@ -111,6 +111,7 @@ struct _MetaDisplay
|
|||||||
Atom atom_net_wm_state_hidden;
|
Atom atom_net_wm_state_hidden;
|
||||||
Atom atom_net_wm_window_type_utility;
|
Atom atom_net_wm_window_type_utility;
|
||||||
Atom atom_net_wm_window_type_splashscreen;
|
Atom atom_net_wm_window_type_splashscreen;
|
||||||
|
Atom atom_net_wm_state_fullscreen;
|
||||||
|
|
||||||
/* This is the actual window from focus events,
|
/* This is the actual window from focus events,
|
||||||
* not the one we last set
|
* not the one we last set
|
||||||
|
@ -78,7 +78,7 @@ set_wm_check_hint (MetaScreen *screen)
|
|||||||
static int
|
static int
|
||||||
set_supported_hint (MetaScreen *screen)
|
set_supported_hint (MetaScreen *screen)
|
||||||
{
|
{
|
||||||
#define N_SUPPORTED 26
|
#define N_SUPPORTED 27
|
||||||
#define N_WIN_SUPPORTED 1
|
#define N_WIN_SUPPORTED 1
|
||||||
Atom atoms[N_SUPPORTED];
|
Atom atoms[N_SUPPORTED];
|
||||||
|
|
||||||
@ -108,6 +108,7 @@ set_supported_hint (MetaScreen *screen)
|
|||||||
atoms[23] = screen->display->atom_net_wm_state_hidden;
|
atoms[23] = screen->display->atom_net_wm_state_hidden;
|
||||||
atoms[24] = screen->display->atom_net_wm_window_type_utility;
|
atoms[24] = screen->display->atom_net_wm_window_type_utility;
|
||||||
atoms[25] = screen->display->atom_net_wm_window_type_splashscreen;
|
atoms[25] = screen->display->atom_net_wm_window_type_splashscreen;
|
||||||
|
atoms[26] = screen->display->atom_net_wm_state_fullscreen;
|
||||||
|
|
||||||
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
||||||
screen->display->atom_net_supported,
|
screen->display->atom_net_supported,
|
||||||
|
17
src/ui.c
17
src/ui.c
@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
#include "inlinepixbufs.h"
|
#include "inlinepixbufs.h"
|
||||||
|
|
||||||
|
#include <pango/pangox.h>
|
||||||
|
|
||||||
struct _MetaUI
|
struct _MetaUI
|
||||||
{
|
{
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
@ -42,14 +44,13 @@ meta_ui_init (int *argc, char ***argv)
|
|||||||
if (!gtk_init_check (argc, argv))
|
if (!gtk_init_check (argc, argv))
|
||||||
meta_fatal ("Unable to open X display %s\n", XDisplayName (NULL));
|
meta_fatal ("Unable to open X display %s\n", XDisplayName (NULL));
|
||||||
|
|
||||||
{
|
/* FIXME hackaround for Pango opening a separate display
|
||||||
/* FIXME this is a hackaround for a GTK bug with using menus without
|
* connection and doing a server grab while we have a grab
|
||||||
* menubars. we have to use the get_type value since it's G_GNUC_CONST
|
* on the primary display connection. This forces Pango to
|
||||||
*/
|
* go ahead and do its font cache before we try to grab
|
||||||
volatile GType t;
|
* the server.
|
||||||
t = gtk_menu_bar_get_type ();
|
*/
|
||||||
t += 5;
|
pango_x_font_map_for_display (gdk_display);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Display*
|
Display*
|
||||||
|
95
src/window.c
95
src/window.c
@ -309,6 +309,7 @@ meta_window_new (MetaDisplay *display, Window xwindow,
|
|||||||
window->user_has_move_resized = FALSE;
|
window->user_has_move_resized = FALSE;
|
||||||
|
|
||||||
window->maximized = FALSE;
|
window->maximized = FALSE;
|
||||||
|
window->fullscreen = FALSE;
|
||||||
window->on_all_workspaces = FALSE;
|
window->on_all_workspaces = FALSE;
|
||||||
window->shaded = FALSE;
|
window->shaded = FALSE;
|
||||||
window->initially_iconic = FALSE;
|
window->initially_iconic = FALSE;
|
||||||
@ -348,6 +349,8 @@ meta_window_new (MetaDisplay *display, Window xwindow,
|
|||||||
window->has_resize_func = TRUE;
|
window->has_resize_func = TRUE;
|
||||||
|
|
||||||
window->has_shade_func = TRUE;
|
window->has_shade_func = TRUE;
|
||||||
|
|
||||||
|
window->has_fullscreen_func = TRUE;
|
||||||
|
|
||||||
window->wm_state_modal = FALSE;
|
window->wm_state_modal = FALSE;
|
||||||
window->wm_state_skip_taskbar = FALSE;
|
window->wm_state_skip_taskbar = FALSE;
|
||||||
@ -839,6 +842,11 @@ set_net_wm_state (MetaWindow *window)
|
|||||||
data[i] = window->display->atom_net_wm_state_maximized_vert;
|
data[i] = window->display->atom_net_wm_state_maximized_vert;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
if (window->fullscreen)
|
||||||
|
{
|
||||||
|
data[i] = window->display->atom_net_wm_state_fullscreen;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
if (window->shaded || window->minimized)
|
if (window->shaded || window->minimized)
|
||||||
{
|
{
|
||||||
data[i] = window->display->atom_net_wm_state_hidden;
|
data[i] = window->display->atom_net_wm_state_hidden;
|
||||||
@ -1289,6 +1297,7 @@ meta_window_maximize (MetaWindow *window)
|
|||||||
|
|
||||||
window->maximized = TRUE;
|
window->maximized = TRUE;
|
||||||
|
|
||||||
|
/* FIXME why did I put this here? */
|
||||||
meta_window_raise (window);
|
meta_window_raise (window);
|
||||||
|
|
||||||
/* save size/pos as appropriate args for move_resize */
|
/* save size/pos as appropriate args for move_resize */
|
||||||
@ -1328,6 +1337,57 @@ meta_window_unmaximize (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_window_make_fullscreen (MetaWindow *window)
|
||||||
|
{
|
||||||
|
if (!window->fullscreen)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||||
|
"Fullscreening %s\n", window->desc);
|
||||||
|
|
||||||
|
window->fullscreen = TRUE;
|
||||||
|
|
||||||
|
/* FIXME why did I put this here? */
|
||||||
|
meta_window_raise (window);
|
||||||
|
|
||||||
|
/* save size/pos as appropriate args for move_resize */
|
||||||
|
window->saved_rect = window->rect;
|
||||||
|
if (window->frame)
|
||||||
|
{
|
||||||
|
window->saved_rect.x += window->frame->rect.x;
|
||||||
|
window->saved_rect.y += window->frame->rect.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* move_resize with new constraints
|
||||||
|
*/
|
||||||
|
meta_window_queue_move_resize (window);
|
||||||
|
|
||||||
|
set_net_wm_state (window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_window_unmake_fullscreen (MetaWindow *window)
|
||||||
|
{
|
||||||
|
if (window->fullscreen)
|
||||||
|
{
|
||||||
|
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||||
|
"Unfullscreening %s\n", window->desc);
|
||||||
|
|
||||||
|
window->fullscreen = FALSE;
|
||||||
|
|
||||||
|
meta_window_move_resize (window,
|
||||||
|
TRUE,
|
||||||
|
window->saved_rect.x,
|
||||||
|
window->saved_rect.y,
|
||||||
|
window->saved_rect.width,
|
||||||
|
window->saved_rect.height);
|
||||||
|
|
||||||
|
set_net_wm_state (window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_shade (MetaWindow *window)
|
meta_window_shade (MetaWindow *window)
|
||||||
{
|
{
|
||||||
@ -2825,6 +2885,19 @@ meta_window_client_message (MetaWindow *window,
|
|||||||
meta_window_unshade (window);
|
meta_window_unshade (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (first == display->atom_net_wm_state_fullscreen ||
|
||||||
|
second == display->atom_net_wm_state_fullscreen)
|
||||||
|
{
|
||||||
|
gboolean make_fullscreen;
|
||||||
|
|
||||||
|
make_fullscreen = (action == _NET_WM_STATE_ADD ||
|
||||||
|
(action == _NET_WM_STATE_TOGGLE && !window->fullscreen));
|
||||||
|
if (make_fullscreen && window->has_fullscreen_func)
|
||||||
|
meta_window_make_fullscreen (window);
|
||||||
|
else
|
||||||
|
meta_window_unmake_fullscreen (window);
|
||||||
|
}
|
||||||
|
|
||||||
if (first == display->atom_net_wm_state_maximized_horz ||
|
if (first == display->atom_net_wm_state_maximized_horz ||
|
||||||
second == display->atom_net_wm_state_maximized_horz ||
|
second == display->atom_net_wm_state_maximized_horz ||
|
||||||
first == display->atom_net_wm_state_maximized_vert ||
|
first == display->atom_net_wm_state_maximized_vert ||
|
||||||
@ -4517,7 +4590,8 @@ recalc_window_features (MetaWindow *window)
|
|||||||
window->has_resize_func = window->mwm_has_resize_func;
|
window->has_resize_func = window->mwm_has_resize_func;
|
||||||
|
|
||||||
window->has_shade_func = TRUE;
|
window->has_shade_func = TRUE;
|
||||||
|
window->has_fullscreen_func = TRUE;
|
||||||
|
|
||||||
/* Semantic category overrides the MWM hints */
|
/* Semantic category overrides the MWM hints */
|
||||||
|
|
||||||
if (window->type == META_WINDOW_DESKTOP ||
|
if (window->type == META_WINDOW_DESKTOP ||
|
||||||
@ -4535,6 +4609,7 @@ recalc_window_features (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
window->has_minimize_func = FALSE;
|
window->has_minimize_func = FALSE;
|
||||||
window->has_maximize_func = FALSE;
|
window->has_maximize_func = FALSE;
|
||||||
|
window->has_fullscreen_func = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If min_size == max_size, then don't allow resize */
|
/* If min_size == max_size, then don't allow resize */
|
||||||
@ -4542,9 +4617,12 @@ recalc_window_features (MetaWindow *window)
|
|||||||
window->size_hints.min_height == window->size_hints.max_height)
|
window->size_hints.min_height == window->size_hints.max_height)
|
||||||
window->has_resize_func = FALSE;
|
window->has_resize_func = FALSE;
|
||||||
|
|
||||||
/* don't allow maximize if we can't resize */
|
/* don't allow fullscreen if we can't resize */
|
||||||
if (!window->has_resize_func)
|
if (!window->has_resize_func)
|
||||||
window->has_maximize_func = FALSE;
|
{
|
||||||
|
window->has_maximize_func = FALSE;
|
||||||
|
window->has_fullscreen_func = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* no shading if not decorated */
|
/* no shading if not decorated */
|
||||||
if (!window->decorated)
|
if (!window->decorated)
|
||||||
@ -4582,7 +4660,8 @@ constrain_size (MetaWindow *window,
|
|||||||
meta_window_get_work_area (window, &work_area);
|
meta_window_get_work_area (window, &work_area);
|
||||||
|
|
||||||
/* Get the allowed size ranges, considering maximized, etc. */
|
/* Get the allowed size ranges, considering maximized, etc. */
|
||||||
if (window->type == META_WINDOW_DESKTOP ||
|
if (window->fullscreen ||
|
||||||
|
window->type == META_WINDOW_DESKTOP ||
|
||||||
window->type == META_WINDOW_DOCK)
|
window->type == META_WINDOW_DOCK)
|
||||||
{
|
{
|
||||||
fullw = window->screen->width;
|
fullw = window->screen->width;
|
||||||
@ -4594,7 +4673,7 @@ constrain_size (MetaWindow *window,
|
|||||||
fullh = work_area.height;
|
fullh = work_area.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->frame)
|
if (window->frame && !window->fullscreen)
|
||||||
{
|
{
|
||||||
fullw -= (fgeom->left_width + fgeom->right_width);
|
fullw -= (fgeom->left_width + fgeom->right_width);
|
||||||
fullh -= (fgeom->top_height + fgeom->bottom_height);
|
fullh -= (fgeom->top_height + fgeom->bottom_height);
|
||||||
@ -4708,15 +4787,13 @@ constrain_position (MetaWindow *window,
|
|||||||
if (!window->placed && window->calc_placement)
|
if (!window->placed && window->calc_placement)
|
||||||
meta_window_place (window, fgeom, x, y, &x, &y);
|
meta_window_place (window, fgeom, x, y, &x, &y);
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (window->fullscreen)
|
if (window->fullscreen)
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
}
|
}
|
||||||
#endif
|
else if (window->type != META_WINDOW_DESKTOP &&
|
||||||
if (window->type != META_WINDOW_DESKTOP &&
|
window->type != META_WINDOW_DOCK)
|
||||||
window->type != META_WINDOW_DOCK)
|
|
||||||
{
|
{
|
||||||
int nw_x, nw_y;
|
int nw_x, nw_y;
|
||||||
int se_x, se_y;
|
int se_x, se_y;
|
||||||
|
@ -87,6 +87,9 @@ struct _MetaWindow
|
|||||||
/* Whether we're shaded */
|
/* Whether we're shaded */
|
||||||
guint shaded : 1;
|
guint shaded : 1;
|
||||||
|
|
||||||
|
/* Whether we're fullscreen */
|
||||||
|
guint fullscreen : 1;
|
||||||
|
|
||||||
/* Whether we're sticky in the multi-workspace sense
|
/* Whether we're sticky in the multi-workspace sense
|
||||||
* (vs. the not-scroll-with-viewport sense, we don't
|
* (vs. the not-scroll-with-viewport sense, we don't
|
||||||
* have no stupid viewports)
|
* have no stupid viewports)
|
||||||
@ -135,6 +138,7 @@ struct _MetaWindow
|
|||||||
guint has_shade_func : 1;
|
guint has_shade_func : 1;
|
||||||
guint has_move_func : 1;
|
guint has_move_func : 1;
|
||||||
guint has_resize_func : 1;
|
guint has_resize_func : 1;
|
||||||
|
guint has_fullscreen_func : 1;
|
||||||
|
|
||||||
/* Weird "_NET_WM_STATE_MODAL" flag */
|
/* Weird "_NET_WM_STATE_MODAL" flag */
|
||||||
guint wm_state_modal : 1;
|
guint wm_state_modal : 1;
|
||||||
@ -253,6 +257,8 @@ void meta_window_unstick (MetaWindow *window);
|
|||||||
|
|
||||||
void meta_window_activate (MetaWindow *window,
|
void meta_window_activate (MetaWindow *window,
|
||||||
guint32 current_time);
|
guint32 current_time);
|
||||||
|
void meta_window_make_fullscreen (MetaWindow *window);
|
||||||
|
void meta_window_unmake_fullscreen (MetaWindow *window);
|
||||||
|
|
||||||
/* args to move are window pos, not frame pos */
|
/* args to move are window pos, not frame pos */
|
||||||
void meta_window_move (MetaWindow *window,
|
void meta_window_move (MetaWindow *window,
|
||||||
|
Loading…
Reference in New Issue
Block a user