From a0c3fad023c0b5812db38d2f1bd41998d7c001b1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 4 Dec 2011 14:25:16 +0100 Subject: [PATCH] * nsfns.m (get_geometry_from_preferences): New function. (Fx_create_frame): Call get_geometry_from_preferences. Fixes: debbugs:10103 --- src/ChangeLog | 5 +++++ src/nsfns.m | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index a1d5cc9d5bd..a707eaae9eb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-12-04 Jan Djärv + + * nsfns.m (get_geometry_from_preferences): New function. + (Fx_create_frame): Call get_geometry_from_preferences (Bug#10103). + 2011-12-04 Andreas Schwab * emacs.c (Qkill_emacs): Define. diff --git a/src/nsfns.m b/src/nsfns.m index 280fee0b27b..482650fab2b 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1076,7 +1076,41 @@ unwind_create_frame (Lisp_Object frame) return Qnil; } +/* + * Read geometry related parameters from preferences if not in PARMS. + * Returns the union of parms and any preferences read. + */ + +static Lisp_Object +get_geometry_from_preferences (struct ns_display_info *dpyinfo, + Lisp_Object parms) +{ + struct { + const char *val; + const char *cls; + Lisp_Object tem; + } r[] = { + { "width", "Width", Qwidth }, + { "height", "Height", Qheight }, + { "left", "Left", Qleft }, + { "top", "Top", Qtop }, + }; + + int i; + for (i = 0; i < sizeof (r)/sizeof (r[0]); ++i) + { + if (NILP (Fassq (r[i].tem, parms))) + { + Lisp_Object value + = x_get_arg (dpyinfo, parms, r[i].tem, r[i].val, r[i].cls, + RES_TYPE_NUMBER); + if (! EQ (value, Qunbound)) + parms = Fcons (Fcons (r[i].tem, value), parms); + } + } + return parms; +} /* ========================================================================== @@ -1285,6 +1319,7 @@ This function is an internal primitive--use `make-frame' instead. */) x_default_parameter (f, parms, Qtitle, Qnil, "title", "Title", RES_TYPE_STRING); + parms = get_geometry_from_preferences (dpyinfo, parms); window_prompting = x_figure_window_size (f, parms, 1); tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); -- 2.39.2