all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Erik Charlebois <erikcharlebois@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 14180@debbugs.gnu.org
Subject: bug#14180: PATCH Better fullscreen frame support on Windows
Date: Sat, 13 Apr 2013 21:23:16 -0400	[thread overview]
Message-ID: <CAC+abJZqyenLiJmV6F3reQgOzfbaOCBsmL0oAS8B0O=xiNgXHQ@mail.gmail.com> (raw)
In-Reply-To: <83bo9i8wzf.fsf@gnu.org>


[-- Attachment #1.1: Type: text/plain, Size: 1938 bytes --]

I've rewritten the patch to preserve the maximized, fullwidth and
fullheight functionality and fix them
on Windows 8; came out cleaner in the end too.

The FULLSCREEN_WAIT flag now gets cleared prior to using want_fullscreen
(was a bug in the
existing implementation too I believe).

I've contacted the FSF clerk. Hopefully that can get cleared up soon.

2013-04-11  Erik Charlebois  <erikcharlebois@gmail.com>

* src/w32fns.c (w32_fullscreen_rect): New function to compute the
window rectangle for the given fullscreen mode.
(w32_wnd_proc): When in a fullscreen mode, WM_WINDOWPOSCHANGING
no longer tunes the window size.  This keeps the window's edges
flush with the screen and allows the taskbar to hide itself in
fullboth.
* src/w32term.c (w32fullscreen_hook): fullboth now shows without
window decorations and uses the entire screen.


On Sat, Apr 13, 2013 at 7:56 AM, Eli Zaretskii <eliz@gnu.org> wrote:

> > Date: Sat, 13 Apr 2013 13:33:56 +0200
> > From: Jan Djärv <jan.h.d@swipnet.se>
> > CC: Erik Charlebois <erikcharlebois@gmail.com>, 14180@debbugs.gnu.org
> >
> > 2013-04-13 12:09, Eli Zaretskii skrev:
> >
> > >
> > > Jan, does the fullscreen functionality on X also maximizes the frame
> > > to one of the monitors, when several monitors are available?  I don't
> > > want to introduce differences in behavior here.
> > >
> >
> > If there is a window manager running, we just tell the window manager to
> make
> > Emacs fullscreen, so it is really up to the WM.  The window managers I
> worked
> > with do maximize on one monitor only.
> >
> > When no WM is running we maximize to the whole display, i.e. all
> monitors.
> > But that is more or less just for debugging when you want to see Emacs
> <->
> > Xserver interractions without a WM getting in the way.  It is nothing a
> user
> > ever encounters.
>
> OK, thanks.  So I guess that part of Erik's patch is fine.
>

[-- Attachment #1.2: Type: text/html, Size: 4026 bytes --]

[-- Attachment #2: W32_FULLSCREEN_2.txt --]
[-- Type: text/plain, Size: 13471 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: erikcharlebois@gmail.com-20130414005845-\
#   watpsk8w1701j22x
# target_branch: file:///C:/Users/Erik/Source/emacs/trunk/
# testament_sha1: 9d1bc31821b315ab0286031e20ed7c9d457a6e98
# timestamp: 2013-04-13 20:59:05 -0400
# base_revision_id: rgm@gnu.org-20130410012215-0alg9spmwpmibi45
# 
# Begin patch
=== modified file 'src/w32fns.c'
--- src/w32fns.c	2013-04-07 04:41:19 +0000
+++ src/w32fns.c	2013-04-14 00:58:45 +0000
@@ -157,6 +157,8 @@
 typedef HMONITOR (WINAPI * MonitorFromPoint_Proc) (IN POINT pt, IN DWORD flags);
 typedef BOOL (WINAPI * GetMonitorInfo_Proc)
   (IN HMONITOR monitor, OUT struct MONITOR_INFO* info);
+typedef HMONITOR (WINAPI * MonitorFromWindow_Proc)
+  (IN HWND hwnd, IN DWORD dwFlags);
 
 TrackMouseEvent_Proc track_mouse_event_fn = NULL;
 ImmGetCompositionString_Proc get_composition_string_fn = NULL;
@@ -165,6 +167,7 @@
 ImmSetCompositionWindow_Proc set_ime_composition_window_fn = NULL;
 MonitorFromPoint_Proc monitor_from_point_fn = NULL;
 GetMonitorInfo_Proc get_monitor_info_fn = NULL;
+MonitorFromWindow_Proc monitor_from_window_fn = NULL;
 
 #ifdef NTGUI_UNICODE
 #define unicode_append_menu AppendMenuW
@@ -336,6 +339,66 @@
   *yptr = rect.top;
 }
 
+/* Returns the window rectangle appropriate for the given fullscreen mode.
+   The normal rect parameter was the window's rectangle prior to entering
+   fullscreen mode.  If multiple monitor support is available, the nearest
+   monitor to the window is chosen.  */
+
+void
+w32_fullscreen_rect (HWND hwnd, int fsmode, RECT normal, RECT *rect)
+{
+  struct MONITOR_INFO mi = { sizeof(mi) };
+  if (monitor_from_window_fn && get_monitor_info_fn)
+    {
+      HMONITOR monitor =
+        monitor_from_window_fn (hwnd, MONITOR_DEFAULT_TO_NEAREST);
+      get_monitor_info_fn (monitor, &mi);
+    }
+  else
+    {
+      mi.rcMonitor.left = 0;
+      mi.rcMonitor.top = 0;
+      mi.rcMonitor.right = GetSystemMetrics (SM_CXSCREEN);
+      mi.rcMonitor.bottom = GetSystemMetrics (SM_CYSCREEN);
+      mi.rcWork.left = 0;
+      mi.rcWork.top = 0;
+      mi.rcWork.right = GetSystemMetrics (SM_CXMAXIMIZED);
+      mi.rcWork.bottom = GetSystemMetrics (SM_CYMAXIMIZED);
+    }
+
+  switch (fsmode)
+    {
+    case FULLSCREEN_BOTH:
+      rect->left = mi.rcMonitor.left;
+      rect->top = mi.rcMonitor.top;
+      rect->right = mi.rcMonitor.right;
+      rect->bottom = mi.rcMonitor.bottom;
+      break;
+    case FULLSCREEN_MAXIMIZED:
+      rect->left = mi.rcWork.left;
+      rect->top = mi.rcWork.top;
+      rect->right = mi.rcWork.right;
+      rect->bottom = mi.rcWork.bottom;
+      break;
+    case FULLSCREEN_WIDTH:
+      rect->left = mi.rcWork.left;
+      rect->top = normal.top;
+      rect->right = mi.rcWork.right;
+      rect->bottom = normal.bottom;
+      break;
+    case FULLSCREEN_HEIGHT:
+      rect->left = normal.left;
+      rect->top = mi.rcWork.top;
+      rect->right = normal.right;
+      rect->bottom = mi.rcWork.bottom;
+      break;
+    case FULLSCREEN_NONE:
+    default:
+      *rect = normal;
+      break;
+    }
+}
+
 \f
 
 DEFUN ("w32-define-rgb-color", Fw32_define_rgb_color,
@@ -3691,6 +3754,13 @@
       /* Don't restrict the sizing of tip frames.  */
       if (hwnd == tip_window)
 	return 0;
+
+      /* Don't restrict the sizing of fullscreened frames, allowing them to be
+         flush with the sides of the screen.  */
+      f = x_window_to_frame (dpyinfo, hwnd);
+      if (f && FRAME_PREV_FSMODE (f) != FULLSCREEN_NONE)
+        return 0;
+
       {
 	WINDOWPLACEMENT wp;
 	LPWINDOWPOS lppos = (WINDOWPOS *) lParam;
@@ -7635,6 +7705,8 @@
     GetProcAddress (user32_lib, "MonitorFromPoint");
   get_monitor_info_fn = (GetMonitorInfo_Proc)
     GetProcAddress (user32_lib, "GetMonitorInfoA");
+  monitor_from_window_fn = (MonitorFromWindow_Proc)
+    GetProcAddress (user32_lib, "MonitorFromWindow");
 
   {
     HMODULE imm32_lib = GetModuleHandle ("imm32.dll");

=== modified file 'src/w32term.c'
--- src/w32term.c	2013-04-01 07:58:04 +0000
+++ src/w32term.c	2013-04-14 00:58:45 +0000
@@ -5663,88 +5663,40 @@
 {
   if (FRAME_VISIBLE_P (f))
     {
-      int width, height, top_pos, left_pos, pixel_height, pixel_width;
-      int cur_w = FRAME_COLS (f), cur_h = FRAME_LINES (f);
-      RECT workarea_rect;
-
-      block_input ();
-      /* Record current "normal" dimensions for restoring later.  */
-      if (!(   FRAME_PREV_FSMODE (f) == FULLSCREEN_BOTH
-	    || FRAME_PREV_FSMODE (f) == FULLSCREEN_MAXIMIZED))
-	{
-	  if (FRAME_PREV_FSMODE (f) != FULLSCREEN_HEIGHT)
-	    {
-	      FRAME_NORMAL_HEIGHT (f) = cur_h;
-	      FRAME_NORMAL_TOP (f) = f->top_pos;
-	    }
-	  if (FRAME_PREV_FSMODE (f) != FULLSCREEN_WIDTH)
-	    {
-	      FRAME_NORMAL_WIDTH (f)  = cur_w;
-	      FRAME_NORMAL_LEFT (f) = f->left_pos;
-	    }
-	}
-      eassert (FRAME_NORMAL_HEIGHT (f) > 0);
-      eassert (FRAME_NORMAL_WIDTH (f) > 0);
-      x_real_positions (f, &f->left_pos, &f->top_pos);
-      x_fullscreen_adjust (f, &width, &height, &top_pos, &left_pos);
-
-      SystemParametersInfo (SPI_GETWORKAREA, 0, &workarea_rect, 0);
-      pixel_height = workarea_rect.bottom - workarea_rect.top;
-      pixel_width  = workarea_rect.right  - workarea_rect.left;
-      /* Need to send SC_RESTORE to the window, in case we are
-	 resizing from FULLSCREEN_MAXIMIZED.  Otherwise, the mouse
-	 resize hints will not be shown by the window manager when the
-	 mouse pointer hovers over the window edges, because the WM
-	 will still think the window is maximized.  */
-      if (f->want_fullscreen != FULLSCREEN_BOTH)
-	SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_RESTORE, 0);
-
+      HWND hwnd = FRAME_W32_WINDOW(f);
+      DWORD dwStyle = GetWindowLong (hwnd, GWL_STYLE);
+      RECT rect;
+
+      block_input();
+      f->want_fullscreen &= ~FULLSCREEN_WAIT;
+
+      if (FRAME_PREV_FSMODE (f) == FULLSCREEN_NONE)
+        GetWindowPlacement (hwnd, &FRAME_NORMAL_PLACEMENT (f));
+
+      if (FRAME_PREV_FSMODE (f) == FULLSCREEN_BOTH)
+        {
+          SetWindowLong (hwnd, GWL_STYLE, dwStyle | WS_OVERLAPPEDWINDOW);
+          SetWindowPos (hwnd, NULL, 0, 0, 0, 0,
+                        SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
+                        SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
+        }
+
+      w32_fullscreen_rect (hwnd, f->want_fullscreen,
+                           FRAME_NORMAL_PLACEMENT (f).rcNormalPosition, &rect);
       FRAME_PREV_FSMODE (f) = f->want_fullscreen;
-      switch (f->want_fullscreen)
-	{
-	case FULLSCREEN_BOTH:
-	  PostMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
-	  break;
-	case FULLSCREEN_MAXIMIZED:
-	  height =
-	    FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixel_height)
-	    - XINT (Ftool_bar_lines_needed (selected_frame))
-	    + (NILP (Vmenu_bar_mode) ? 1 : 0);
-	  width  =
-	    FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixel_width)
-	    - FRAME_SCROLL_BAR_COLS (f);
-	  left_pos = workarea_rect.left;
-	  top_pos = workarea_rect.top;
-	  break;
-	case FULLSCREEN_WIDTH:
-	  width  =
-	    FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixel_width)
-	    - FRAME_SCROLL_BAR_COLS (f);
-	  height = FRAME_NORMAL_HEIGHT (f);
-	  left_pos = workarea_rect.left;
-	  break;
-	case FULLSCREEN_HEIGHT:
-	  height =
-	    FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixel_height)
-	    - XINT (Ftool_bar_lines_needed (selected_frame))
-	    + (NILP (Vmenu_bar_mode) ? 1 : 0);
-	  width = FRAME_NORMAL_WIDTH (f);
-	  top_pos = workarea_rect.top;
-	  break;
-	case FULLSCREEN_NONE:
-	  height = FRAME_NORMAL_HEIGHT (f);
-	  width = FRAME_NORMAL_WIDTH (f);
-	  left_pos = FRAME_NORMAL_LEFT (f);
-	  top_pos = FRAME_NORMAL_TOP (f);
-	  break;
-	}
+      if (f->want_fullscreen == FULLSCREEN_BOTH)
+        {
+          SetWindowLong (hwnd, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW);
+          SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
+                        rect.right - rect.left, rect.bottom - rect.top,
+                        SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
+        }
+      else
+        {
+          SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
+                        rect.right - rect.left, rect.bottom - rect.top, 0);
+        }
 
-      if (cur_w != width || cur_h != height)
-	{
-	  x_set_offset (f, left_pos, top_pos, 1);
-	  x_set_window_size (f, 1, width, height);
-	  do_pending_window_change (0);
-	}
       f->want_fullscreen = FULLSCREEN_NONE;
       unblock_input ();
     }

=== modified file 'src/w32term.h'
--- src/w32term.h	2013-04-07 04:41:19 +0000
+++ src/w32term.h	2013-04-14 00:58:45 +0000
@@ -71,6 +71,8 @@
 };
 
 extern void w32_regenerate_palette (struct frame *f);
+extern void w32_fullscreen_rect (HWND hwnd, int fsmode, RECT normal,
+                                 RECT *rect);
 
 \f
 /* For each display (currently only one on w32), we have a structure that
@@ -362,7 +364,7 @@
   /* Frame geometry and full-screen mode before it was resized by
      specifying the 'fullscreen' frame parameter.  Used to restore the
      geometry when 'fullscreen' is reset to nil.  */
-  int normal_width, normal_height, normal_top, normal_left;
+  WINDOWPLACEMENT normal_placement;
   int prev_fsmode;
 };
 
@@ -396,11 +398,8 @@
 #define FRAME_SMALLEST_FONT_HEIGHT(F) \
      FRAME_W32_DISPLAY_INFO(F)->smallest_font_height
 
-#define FRAME_NORMAL_WIDTH(F)  ((F)->output_data.w32->normal_width)
-#define FRAME_NORMAL_HEIGHT(F) ((F)->output_data.w32->normal_height)
-#define FRAME_NORMAL_TOP(F)    ((F)->output_data.w32->normal_top)
-#define FRAME_NORMAL_LEFT(F)   ((F)->output_data.w32->normal_left)
-#define FRAME_PREV_FSMODE(F)   ((F)->output_data.w32->prev_fsmode)
+#define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement)
+#define FRAME_PREV_FSMODE(F)      ((F)->output_data.w32->prev_fsmode)
 
 \f
 /* W32-specific scroll bar stuff.  */

# Begin bundle
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

  reply	other threads:[~2013-04-14  1:23 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-11  4:59 bug#14180: PATCH Better fullscreen frame support on Windows Erik Charlebois
2013-04-12  9:28 ` martin rudalics
2013-04-12 19:32   ` Erik Charlebois
2013-04-13  8:03     ` martin rudalics
2013-04-13 10:09 ` Eli Zaretskii
2013-04-13 11:33   ` Jan Djärv
2013-04-13 11:56     ` Eli Zaretskii
2013-04-14  1:23       ` Erik Charlebois [this message]
2013-04-14  6:41         ` Eli Zaretskii
2013-04-20  0:42           ` Erik Charlebois
2013-04-20  7:36             ` Eli Zaretskii
2013-04-20 14:34               ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAC+abJZqyenLiJmV6F3reQgOzfbaOCBsmL0oAS8B0O=xiNgXHQ@mail.gmail.com' \
    --to=erikcharlebois@gmail.com \
    --cc=14180@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.