]> git.eshelyaron.com Git - emacs.git/commitdiff
Convert Free_Pixmap macro into terminal hook
authorAlexander Gramiak <agrambot@gmail.com>
Thu, 9 May 2019 15:37:50 +0000 (09:37 -0600)
committerAlexander Gramiak <agrambot@gmail.com>
Fri, 10 May 2019 23:26:12 +0000 (17:26 -0600)
* src/termhooks.h (terminal) [HAVE_WINDOW_SYSTEM]: New terminal hook
free_pixmap.

* src/image.c: Replace Free_Pixmap with free_pixmap.

* src/msdos.h (FRAME_X_DISPLAY):
* src/nsgui.h (Display):
* src/nsterm.h (FRAME_NS_DISPLAY, FRAME_X_DISPLAY, FRAME_X_SCREEN)
(FRAME_X_VISUAL):
* src/w32term.h (FRAME_X_DISPLAY): Remove unused X-compatibility
macros and typedefs.

* src/nsterm.m:
* src/w32term.c:
* src/xterm.c: Implement and set free_pixmap hook.

src/image.c
src/msdos.h
src/nsgui.h
src/nsterm.h
src/nsterm.m
src/termhooks.h
src/w32term.c
src/w32term.h
src/xterm.c

index e8cb4341773a97451dc691b1526698c50272050e..0779594989a761188aade1793c107bb536526ade 100644 (file)
@@ -1221,26 +1221,6 @@ four_corners_best (XImagePtr_or_DC ximg, int *corners,
   return best;
 }
 
-/* Portability macros */
-
-#ifdef HAVE_NTGUI
-
-#define Free_Pixmap(display, pixmap) \
-  DeleteObject (pixmap)
-
-#elif defined (HAVE_NS)
-
-#define Free_Pixmap(display, pixmap) \
-  ns_release_object (pixmap)
-
-#else
-
-#define Free_Pixmap(display, pixmap) \
-  XFreePixmap (display, pixmap)
-
-#endif /* !HAVE_NTGUI && !HAVE_NS */
-
-
 /* Return the `background' field of IMG.  If IMG doesn't have one yet,
    it is guessed heuristically.  If non-zero, XIMG is an existing
    XImage object (or device context with the image selected on W32) to
@@ -1328,7 +1308,7 @@ image_clear_image_1 (struct frame *f, struct image *img, int flags)
     {
       if (img->pixmap)
        {
-         Free_Pixmap (FRAME_X_DISPLAY (f), img->pixmap);
+         FRAME_TERMINAL (f)->free_pixmap (f, img->pixmap);
          img->pixmap = NO_PIXMAP;
          /* NOTE (HAVE_NS): background color is NOT an indexed color! */
          img->background_valid = 0;
@@ -1347,7 +1327,7 @@ image_clear_image_1 (struct frame *f, struct image *img, int flags)
     {
       if (img->mask)
        {
-         Free_Pixmap (FRAME_X_DISPLAY (f), img->mask);
+         FRAME_TERMINAL (f)->free_pixmap (f, img->mask);
          img->mask = NO_PIXMAP;
          img->background_transparent_valid = 0;
        }
index 0d15df7a331b61f4411b2d85c3ae77972ec47001..90ceea8e3d219784f17f0033c8bbfb7f42278806 100644 (file)
@@ -95,7 +95,6 @@ typedef struct tty_display_info Display_Info;
 extern struct tty_display_info the_only_display_info;
 extern struct tty_output the_only_tty_output;
 
-#define FRAME_X_DISPLAY(f) ((Display *) 0)
 #define FRAME_FONT(f) ((f)->output_data.tty->font)
 #define FRAME_DISPLAY_INFO(f) (&the_only_display_info)
 
index c147f4dec492b742b7259f6b8f18cc412e39e2ae..ab6cdff1e5c8b21260b0f024b1d8f2ad2032c02e 100644 (file)
@@ -115,7 +115,6 @@ typedef NSColor * Color;
 typedef void * Color;
 #endif
 typedef int Window;
-typedef int Display;
 
 
 /* Some sort of attempt to normalize rectangle handling.  Seems a bit
index 683f2dd934184e43671c16fae9c9267ecb1b9317..ffaf809785e04916353b26aeb3cf937f32c13ece 100644 (file)
@@ -997,12 +997,6 @@ struct x_output
 #define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc)
 #define FRAME_NATIVE_WINDOW(f) FRAME_NS_WINDOW (f)
 
-/* This is the `Display *' which frame F is on.  */
-#define FRAME_NS_DISPLAY(f) (0)
-#define FRAME_X_DISPLAY(f) (0)
-#define FRAME_X_SCREEN(f) (0)
-#define FRAME_X_VISUAL(f) FRAME_DISPLAY_INFO(f)->visual
-
 #define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color)
 #define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color)
 
index ffb7b7692b4b072fbee7b12e461a182f368c0252..d688aceca537ac07837510cea600b1b4135294bf 100644 (file)
@@ -2515,8 +2515,7 @@ ns_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
 
   /* Clear the mouse-moved flag for every frame on this display.  */
   FOR_EACH_FRAME (tail, frame)
-    if (FRAME_NS_P (XFRAME (frame))
-        && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp))
+    if (FRAME_NS_P (XFRAME (frame)))
       XFRAME (frame)->mouse_moved = 0;
 
   dpyinfo->last_mouse_scroll_bar = nil;
@@ -4966,6 +4965,18 @@ ns_judge_scroll_bars (struct frame *f)
     [eview updateFrameSize: NO];
 }
 
+/* ==========================================================================
+
+    Image Hooks
+
+   ========================================================================== */
+
+static void
+ns_free_pixmap (struct frame *_f, Pixmap pixmap)
+{
+  ns_release_object (pixmap);
+}
+
 /* ==========================================================================
 
     Initialization
@@ -5196,6 +5207,7 @@ ns_create_terminal (struct ns_display_info *dpyinfo)
   terminal->redeem_scroll_bar_hook = ns_redeem_scroll_bar;
   terminal->judge_scroll_bars_hook = ns_judge_scroll_bars;
   terminal->get_string_resource_hook = ns_get_string_resource;
+  terminal->free_pixmap = ns_free_pixmap;
   terminal->delete_frame_hook = ns_destroy_window;
   terminal->delete_terminal_hook = ns_delete_terminal;
   /* Other hooks are NULL by default.  */
index 54f09e03033b075fb8a61b22d28a0e3f4fc1a481..0962add081705d40a6091fcb9990e654bc1ed1c3 100644 (file)
@@ -741,6 +741,15 @@ struct terminal
                                             const char *name,
                                             const char *class);
 \f
+  /* Image hooks */
+#ifdef HAVE_WINDOW_SYSTEM
+  /* Free the pixmap PIXMAP on F.  */
+  void (*free_pixmap) (struct frame *f, Pixmap pixmap);
+
+#endif
+\f
+  /* Deletion hooks */
+
   /* Called to delete the device-specific portions of a frame that is
      on this terminal device. */
   void (*delete_frame_hook) (struct frame *);
index 0abec3d92a70a68dfc1febde77254633fe60079f..435455e1a6dfbb790a999c966c7678867c6a9278 100644 (file)
@@ -6869,6 +6869,7 @@ w32_wm_set_size_hint (struct frame *f, long flags, bool user_position)
   leave_crit ();
 }
 
+\f
 /***********************************************************************
                                Fonts
  ***********************************************************************/
@@ -6940,6 +6941,18 @@ w32_toggle_invisible_pointer (struct frame *f, bool invisible)
   unblock_input ();
 }
 
+\f
+/***********************************************************************
+                            Image Hooks
+ ***********************************************************************/
+
+static void
+w32_free_pixmap (struct frame *_f, Pixmap pixmap)
+{
+  DeleteObject (pixmap);
+}
+
+\f
 /***********************************************************************
                            Initialization
  ***********************************************************************/
@@ -7119,6 +7132,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo)
   terminal->redeem_scroll_bar_hook = w32_redeem_scroll_bar;
   terminal->judge_scroll_bars_hook = w32_judge_scroll_bars;
   terminal->get_string_resource_hook = w32_get_string_resource;
+  terminal->free_pixmap = w32_free_pixmap;
   terminal->delete_frame_hook = w32_destroy_window;
   terminal->delete_terminal_hook = w32_delete_terminal;
   /* Other hooks are NULL by default.  */
index de372d7e5d7d1cdbbca0a5bb2dea227bf003aa30..a03b9fd3311ba7ce1681befdc82f754d8d7fd040 100644 (file)
@@ -420,9 +420,6 @@ extern struct w32_output w32term_display;
 /* This gives the w32_display_info structure for the display F is on.  */
 #define FRAME_DISPLAY_INFO(f) ((void) (f), (&one_w32_display_info))
 
-/* This is the `Display *' which frame F is on.  */
-#define FRAME_X_DISPLAY(f) (0)
-
 #define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement)
 #define FRAME_PREV_FSMODE(F)      ((F)->output_data.w32->prev_fsmode)
 
index bd69e6c7a8229c12b671c9d7f320340cba195367..9371d47c95e4ad4931296e0f72a7c6a85c2d2efa 100644 (file)
@@ -12180,6 +12180,17 @@ x_check_font (struct frame *f, struct font *font)
 
 #endif /* GLYPH_DEBUG */
 
+\f
+/***********************************************************************
+                             Image Hooks
+ ***********************************************************************/
+
+static void
+x_free_pixmap (struct frame *f, Pixmap pixmap)
+{
+  XFreePixmap (FRAME_X_DISPLAY (f), pixmap);
+}
+
 \f
 /***********************************************************************
                            Initialization
@@ -13257,6 +13268,7 @@ x_create_terminal (struct x_display_info *dpyinfo)
   terminal->redeem_scroll_bar_hook = XTredeem_scroll_bar;
   terminal->judge_scroll_bars_hook = XTjudge_scroll_bars;
   terminal->get_string_resource_hook = x_get_string_resource;
+  terminal->free_pixmap = x_free_pixmap;
   terminal->delete_frame_hook = x_destroy_window;
   terminal->delete_terminal_hook = x_delete_terminal;
   /* Other hooks are NULL by default.  */