/* Functions for the X window system.
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include <Xm/FileSB.h>
#endif
+#ifdef USE_LUCID
+#include "../lwlib/xlwmenu.h"
+#endif
+
#if !defined(NO_EDITRES)
#define HACK_EDITRES
extern void _XEditResCheckMessages ();
extern LWLIB_ID widget_id_tick;
-#ifdef USE_LUCID
-/* This is part of a kludge--see lwlib/xlwmenu.c. */
-extern XFontStruct *xlwmenu_default_font;
-#endif
-
extern void free_frame_menubar ();
extern double atof ();
extern Lisp_Object Vwindow_system_version;
+/* In editfns.c */
+
+extern Lisp_Object Vsystem_name;
+
/* The below are defined in frame.c. */
+extern Lisp_Object Vmenu_bar_mode, Vtool_bar_mode;
+extern Lisp_Object Qtooltip;
+
#if GLYPH_DEBUG
int image_cache_refcount, dpyinfo_refcount;
#endif
/* Error if we are not connected to X. */
void
-check_x ()
+check_x (void)
{
if (! x_in_use)
error ("X windows are not in use or not initialized");
You should not call this unless HAVE_MENUS is defined. */
int
-have_menus_p ()
+have_menus_p (void)
{
return x_in_use;
}
and checking validity for X. */
FRAME_PTR
-check_x_frame (frame)
- Lisp_Object frame;
+check_x_frame (Lisp_Object frame)
{
FRAME_PTR f;
the first X display on the list. */
struct x_display_info *
-check_x_display_info (object)
- Lisp_Object object;
+check_x_display_info (Lisp_Object object)
{
struct x_display_info *dpyinfo = NULL;
/* This function can be called during GC, so use GC_xxx type test macros. */
struct frame *
-x_window_to_frame (dpyinfo, wdesc)
- struct x_display_info *dpyinfo;
- int wdesc;
+x_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
{
Lisp_Object tail, frame;
struct frame *f;
windows. */
struct frame *
-x_any_window_to_frame (dpyinfo, wdesc)
- struct x_display_info *dpyinfo;
- int wdesc;
+x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
{
Lisp_Object tail, frame;
struct frame *f, *found;
/* Likewise, but consider only the menu bar widget. */
struct frame *
-x_menubar_window_to_frame (dpyinfo, wdesc)
- struct x_display_info *dpyinfo;
- int wdesc;
+x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event)
{
+ Window wdesc = event->xany.window;
Lisp_Object tail, frame;
struct frame *f;
struct x_output *x;
if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
continue;
x = f->output_data.x;
- /* Match if the window is this frame's menubar. */
#ifdef USE_GTK
- if (x->menubar_widget)
- {
- GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
-
- /* This gives false positives, but the rectangle check in xterm.c
- where this is called takes care of that. */
- if (gwdesc != 0
- && (gwdesc == x->menubar_widget
- || gtk_widget_is_ancestor (x->menubar_widget, gwdesc)
- || gtk_widget_is_ancestor (gwdesc, x->menubar_widget)))
- return f;
- }
+ if (x->menubar_widget && xg_event_is_for_menubar (f, event))
+ return f;
#else
+ /* Match if the window is this frame's menubar. */
if (x->menubar_widget
&& lw_window_is_in_menubar (wdesc, x->menubar_widget))
return f;
If WDESC is some other (smaller) window, we return 0. */
struct frame *
-x_top_window_to_frame (dpyinfo, wdesc)
- struct x_display_info *dpyinfo;
- int wdesc;
+x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
{
Lisp_Object tail, frame;
struct frame *f;
\f
-static void x_default_font_parameter P_ ((struct frame *, Lisp_Object));
-
-static Lisp_Object unwind_create_frame P_ ((Lisp_Object));
-static Lisp_Object unwind_create_tip_frame P_ ((Lisp_Object));
-
-void x_set_foreground_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
-static void x_set_wait_for_wm P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_background_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_mouse_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_cursor_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_border_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_cursor_type P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_icon_type P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_icon_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_explicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_title P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
-void x_set_scroll_bar_foreground P_ ((struct frame *, Lisp_Object,
- Lisp_Object));
-void x_set_scroll_bar_background P_ ((struct frame *, Lisp_Object,
- Lisp_Object));
-static Lisp_Object x_default_scroll_bar_color_parameter P_ ((struct frame *,
- Lisp_Object,
- Lisp_Object,
- char *, char *,
- int));
+static void x_default_font_parameter (struct frame *, Lisp_Object);
+
+static Lisp_Object unwind_create_frame (Lisp_Object);
+static Lisp_Object unwind_create_tip_frame (Lisp_Object);
+
+void x_set_foreground_color (struct frame *, Lisp_Object, Lisp_Object);
+static void x_set_wait_for_wm (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_background_color (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_mouse_color (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_cursor_color (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_border_color (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_cursor_type (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_icon_type (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_icon_name (struct frame *, Lisp_Object, Lisp_Object);
+void x_explicitly_set_name (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_title (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_tool_bar_lines (struct frame *, Lisp_Object, Lisp_Object);
+void x_set_scroll_bar_foreground (struct frame *, Lisp_Object,
+ Lisp_Object);
+void x_set_scroll_bar_background (struct frame *, Lisp_Object,
+ Lisp_Object);
+static Lisp_Object x_default_scroll_bar_color_parameter (struct frame *,
+ Lisp_Object,
+ Lisp_Object,
+ char *, char *,
+ int);
\f
/* Store the screen positions of frame F into XPTR and YPTR.
not Emacs's own window. */
void
-x_real_positions (f, xptr, yptr)
- FRAME_PTR f;
- int *xptr, *yptr;
+x_real_positions (FRAME_PTR f, int *xptr, int *yptr)
{
int win_x, win_y, outer_x, outer_y;
int real_x = 0, real_y = 0;
/* Gamma-correct COLOR on frame F. */
void
-gamma_correct (f, color)
- struct frame *f;
- XColor *color;
+gamma_correct (struct frame *f, XColor *color)
{
if (f->gamma)
{
no color could be allocated. */
int
-x_defined_color (f, color_name, color, alloc_p)
- struct frame *f;
- char *color_name;
- XColor *color;
- int alloc_p;
+x_defined_color (struct frame *f, const char *color_name,
+ XColor *color, int alloc_p)
{
int success_p;
Display *dpy = FRAME_X_DISPLAY (f);
Signal an error if color can't be allocated. */
int
-x_decode_color (f, color_name, mono_color)
- FRAME_PTR f;
- Lisp_Object color_name;
- int mono_color;
+x_decode_color (FRAME_PTR f, Lisp_Object color_name, int mono_color)
{
XColor cdef;
See also the comment of wait_for_wm in struct x_output. */
static void
-x_set_wait_for_wm (f, new_value, old_value)
- struct frame *f;
- Lisp_Object new_value, old_value;
+x_set_wait_for_wm (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
{
f->output_data.x->wait_for_wm = !NILP (new_value);
}
may be any format that GdkPixbuf knows about, i.e. not just bitmaps. */
int
-xg_set_icon (f, file)
- FRAME_PTR f;
- Lisp_Object file;
+xg_set_icon (FRAME_PTR f, Lisp_Object file)
{
int result = 0;
Lisp_Object found;
}
int
-xg_set_icon_from_xpm_data (f, data)
- FRAME_PTR f;
- char **data;
+xg_set_icon_from_xpm_data (FRAME_PTR f, char **data)
{
int result = 0;
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) data);
in the standard place; do not attempt to change the window. */
void
-x_set_foreground_color (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_foreground_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
struct x_output *x = f->output_data.x;
unsigned long fg, old_fg;
}
void
-x_set_background_color (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
struct x_output *x = f->output_data.x;
unsigned long bg;
}
static Cursor
-make_invisible_cursor (f)
- struct frame *f;
+make_invisible_cursor (struct frame *f)
{
Display *dpy = FRAME_X_DISPLAY (f);
static char const no_data[] = { 0 };
}
void
-x_set_mouse_color (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
struct x_output *x = f->output_data.x;
Display *dpy = FRAME_X_DISPLAY (f);
}
void
-x_set_cursor_color (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
unsigned long fore_pixel, pixel;
int fore_pixel_allocated_p = 0, pixel_allocated_p = 0;
F has an x-window. */
void
-x_set_border_pixel (f, pix)
- struct frame *f;
- int pix;
+x_set_border_pixel (struct frame *f, int pix)
{
unload_color (f, f->output_data.x->border_pixel);
f->output_data.x->border_pixel = pix;
and so emacs' border colors may be overridden. */
void
-x_set_border_color (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
int pix;
void
-x_set_cursor_type (f, arg, oldval)
- FRAME_PTR f;
- Lisp_Object arg, oldval;
+x_set_cursor_type (FRAME_PTR f, Lisp_Object arg, Lisp_Object oldval)
{
set_frame_cursor_types (f, arg);
}
\f
void
-x_set_icon_type (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
int result;
}
void
-x_set_icon_name (f, arg, oldval)
- struct frame *f;
- Lisp_Object arg, oldval;
+x_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
int result;
\f
void
-x_set_menu_bar_lines (f, value, oldval)
- struct frame *f;
- Lisp_Object value, oldval;
+x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
{
int nlines;
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
#else /* not USE_X_TOOLKIT && not USE_GTK */
FRAME_MENU_BAR_LINES (f) = nlines;
change_window_heights (f->root_window, nlines - olines);
-#endif /* not USE_X_TOOLKIT */
+
+ /* If the menu bar height gets changed, the internal border below
+ the top margin has to be cleared. Also, if the menu bar gets
+ larger, the area for the added lines has to be cleared except for
+ the first menu bar line that is to be drawn later. */
+ if (nlines != olines)
+ {
+ int height = FRAME_INTERNAL_BORDER_WIDTH (f);
+ int width = FRAME_PIXEL_WIDTH (f);
+ int y;
+
+ /* height can be zero here. */
+ if (height > 0 && width > 0)
+ {
+ y = FRAME_TOP_MARGIN_HEIGHT (f);
+
+ BLOCK_INPUT;
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ 0, y, width, height, False);
+ UNBLOCK_INPUT;
+ }
+
+ if (nlines > 1 && nlines > olines)
+ {
+ y = (olines == 0 ? 1 : olines) * FRAME_LINE_HEIGHT (f);
+ height = nlines * FRAME_LINE_HEIGHT (f) - y;
+
+ BLOCK_INPUT;
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ 0, y, width, height, False);
+ UNBLOCK_INPUT;
+ }
+
+ if (nlines == 0 && WINDOWP (f->menu_bar_window))
+ clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);
+ }
+#endif /* not USE_X_TOOLKIT && not USE_GTK */
adjust_glyphs (f);
}
The frame's height doesn't change. */
void
-x_set_tool_bar_lines (f, value, oldval)
- struct frame *f;
- Lisp_Object value, oldval;
+x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
{
int delta, nlines, root_height;
Lisp_Object root_window;
the frame parameter. */
void
-x_set_scroll_bar_foreground (f, value, oldval)
- struct frame *f;
- Lisp_Object value, oldval;
+x_set_scroll_bar_foreground (struct frame *f, Lisp_Object value, Lisp_Object oldval)
{
unsigned long pixel;
parameter. */
void
-x_set_scroll_bar_background (f, value, oldval)
- struct frame *f;
- Lisp_Object value, oldval;
+x_set_scroll_bar_background (struct frame *f, Lisp_Object value, Lisp_Object oldval)
{
unsigned long pixel;
the result should be `COMPOUND_TEXT'. */
static unsigned char *
-x_encode_text (string, coding_system, selectionp, text_bytes, stringp, freep)
- Lisp_Object string, coding_system;
- int *text_bytes, *stringp;
- int selectionp;
- int *freep;
+x_encode_text (Lisp_Object string, Lisp_Object coding_system, int selectionp, int *text_bytes, int *stringp, int *freep)
{
int result = string_xstring_p (string);
struct coding_system coding;
icon name to NAME. */
static void
-x_set_name_internal (f, name)
- FRAME_PTR f;
- Lisp_Object name;
+x_set_name_internal (FRAME_PTR f, Lisp_Object name)
{
if (FRAME_X_WINDOW (f))
{
int bytes, stringp;
int do_free_icon_value = 0, do_free_text_value = 0;
Lisp_Object coding_system;
-#ifdef USE_GTK
Lisp_Object encoded_name;
+ Lisp_Object encoded_icon_name;
struct gcpro gcpro1;
/* As ENCODE_UTF_8 may cause GC and relocation of string data,
GCPRO1 (name);
encoded_name = ENCODE_UTF_8 (name);
UNGCPRO;
-#endif
coding_system = Qcompound_text;
/* Note: Encoding strategy
We may also be able to use "UTF8_STRING" in text.encoding
in the future which can encode all Unicode characters.
But, for the moment, there's no way to know that the
- current window manager supports it or not. */
+ current window manager supports it or not.
+
+ Either way, we also set the _NET_WM_NAME and _NET_WM_ICON_NAME
+ properties. Per the EWMH specification, those two properties
+ are always UTF8_STRING. This matches what gtk_window_set_title()
+ does in the USE_GTK case. */
text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,
&do_free_text_value);
text.encoding = (stringp ? XA_STRING
if (!STRINGP (f->icon_name))
{
icon = text;
+ encoded_icon_name = encoded_name;
}
else
{
: FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
icon.format = 8;
icon.nitems = bytes;
+
+ encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
}
#ifdef USE_GTK
(char *) SDATA (encoded_name));
#else /* not USE_GTK */
XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
+ XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
+ FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name,
+ FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
+ 8, PropModeReplace,
+ (char *) SDATA (encoded_name),
+ SBYTES (encoded_name));
#endif /* not USE_GTK */
XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon);
+ XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
+ FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name,
+ FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING,
+ 8, PropModeReplace,
+ (char *) SDATA (encoded_icon_name),
+ SBYTES (encoded_icon_name));
if (do_free_icon_value)
xfree (icon.value);
F->explicit_name is set, ignore the new name; otherwise, set it. */
void
-x_set_name (f, name, explicit)
- struct frame *f;
- Lisp_Object name;
- int explicit;
+x_set_name (struct frame *f, Lisp_Object name, int explicit)
{
/* Make sure that requests from lisp code override requests from
Emacs redisplay code. */
specified a name for the frame; the name will override any set by the
redisplay code. */
void
-x_explicitly_set_name (f, arg, oldval)
- FRAME_PTR f;
- Lisp_Object arg, oldval;
+x_explicitly_set_name (FRAME_PTR f, Lisp_Object arg, Lisp_Object oldval)
{
x_set_name (f, arg, 1);
}
name; names set this way will never override names set by the user's
lisp code. */
void
-x_implicitly_set_name (f, arg, oldval)
- FRAME_PTR f;
- Lisp_Object arg, oldval;
+x_implicitly_set_name (FRAME_PTR f, Lisp_Object arg, Lisp_Object oldval)
{
x_set_name (f, arg, 0);
}
If NAME is nil, use the frame name as the title. */
void
-x_set_title (f, name, old_name)
- struct frame *f;
- Lisp_Object name, old_name;
+x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
{
/* Don't change the title if it's already NAME. */
if (EQ (name, f->title))
}
void
-x_set_scroll_bar_default_width (f)
- struct frame *f;
+x_set_scroll_bar_default_width (struct frame *f)
{
int wid = FRAME_COLUMN_WIDTH (f);
named NAME. If that is not found either, use the value DEFLT. */
static Lisp_Object
-x_default_scroll_bar_color_parameter (f, alist, prop, xprop, xclass,
- foreground_p)
- struct frame *f;
- Lisp_Object alist;
- Lisp_Object prop;
- char *xprop;
- char *xclass;
- int foreground_p;
+x_default_scroll_bar_color_parameter (struct frame *f,
+ Lisp_Object alist, Lisp_Object prop,
+ char *xprop, char *xclass,
+ int foreground_p)
{
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
Lisp_Object tem;
for example, but Xt doesn't). */
static void
-hack_wm_protocols (f, widget)
- FRAME_PTR f;
- Widget widget;
+hack_wm_protocols (FRAME_PTR f, Widget widget)
{
Display *dpy = XtDisplay (widget);
Window w = XtWindow (widget);
#ifdef HAVE_X_I18N
-static XFontSet xic_create_xfontset P_ ((struct frame *));
-static XIMStyle best_xim_style P_ ((XIMStyles *, XIMStyles *));
+static XFontSet xic_create_xfontset (struct frame *);
+static XIMStyle best_xim_style (XIMStyles *, XIMStyles *);
/* Supported XIM styles, ordered by preference. */
/* Create an Xt fontset spec from the name of a base font.
If `motif' is True use the Motif syntax. */
char *
-xic_create_fontsetname (base_fontname, motif)
- char *base_fontname;
- Bool motif;
+xic_create_fontsetname (char *base_fontname, int motif)
{
const char *sep = motif ? ";" : ",";
char *fontsetname;
{ /* There is no base font name, use the default. */
int len = strlen (base_fontname) + 2;
fontsetname = xmalloc (len);
- bzero (fontsetname, len);
+ memset (fontsetname, 0, len);
strcpy (fontsetname, base_fontname);
}
else
Use the specified font plus the default. */
int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3;
fontsetname = xmalloc (len);
- bzero (fontsetname, len);
+ memset (fontsetname, 0, len);
strcpy (fontsetname, base_fontname);
strcat (fontsetname, sep);
strcat (fontsetname, xic_defaut_fontset);
int diff = (p2 - p3) - 2;
base = alloca (strlen (base_fontname) + 1);
- bcopy (base_fontname, base, p3 - base_fontname);
+ memcpy (base, base_fontname, p3 - base_fontname);
base[p3 - base_fontname] = '*';
base[(p3 - base_fontname) + 1] = '-';
strcpy (base + (p3 - base_fontname) + 2, p2);
/* Build the font spec that matches all charsets. */
len = p - base_fontname + strlen (allcs) + 1;
font_allcs = (char *) alloca (len);
- bzero (font_allcs, len);
- bcopy (base_fontname, font_allcs, p - base_fontname);
+ memset (font_allcs, 0, len);
+ memcpy (font_allcs, base_fontname, p - base_fontname);
strcat (font_allcs, allcs);
/* Build the font spec that matches all families and
add-styles. */
len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1;
font_allfamilies = (char *) alloca (len);
- bzero (font_allfamilies, len);
+ memset (font_allfamilies, 0, len);
strcpy (font_allfamilies, allfamilies);
- bcopy (p1, font_allfamilies + strlen (allfamilies), p - p1);
+ memcpy (font_allfamilies + strlen (allfamilies), p1, p - p1);
strcat (font_allfamilies, allcs);
/* Build the font spec that matches all. */
len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 1;
font_all = (char *) alloca (len);
- bzero (font_all, len);
+ memset (font_all, 0, len);
strcpy (font_all, allfamilies);
strcat (font_all, all);
- bcopy (p2, font_all + strlen (all) + strlen (allfamilies), p - p2);
+ memcpy (font_all + strlen (all) + strlen (allfamilies), p2, p - p2);
strcat (font_all, allcs);
/* Build the actual font set name. */
len = strlen (base_fontname) + strlen (font_allcs)
+ strlen (font_allfamilies) + strlen (font_all) + 5;
fontsetname = xmalloc (len);
- bzero (fontsetname, len);
+ memset (fontsetname, 0, len);
strcpy (fontsetname, base_fontname);
strcat (fontsetname, sep);
strcat (fontsetname, font_allcs);
#endif
static XFontSet
-xic_create_xfontset (f)
- struct frame *f;
+xic_create_xfontset (struct frame *f)
{
XFontSet xfs = NULL;
struct font *font = FRAME_FONT (f);
/* Free the X fontset of frame F if it is the last frame using it. */
void
-xic_free_xfontset (f)
- struct frame *f;
+xic_free_xfontset (struct frame *f)
{
Lisp_Object rest, frame;
int shared_p = 0;
input method XIM. */
static XIMStyle
-best_xim_style (user, xim)
- XIMStyles *user;
- XIMStyles *xim;
+best_xim_style (XIMStyles *user, XIMStyles *xim)
{
int i, j;
static XIMStyle xic_style;
void
-create_frame_xic (f)
- struct frame *f;
+create_frame_xic (struct frame *f)
{
XIM xim;
XIC xic = NULL;
/* Destroy XIC and free XIC fontset of frame F, if any. */
void
-free_frame_xic (f)
- struct frame *f;
+free_frame_xic (struct frame *f)
{
if (FRAME_XIC (f) == NULL)
return;
pixel position X/Y. X and Y are relative to window W. */
void
-xic_set_preeditarea (w, x, y)
- struct window *w;
- int x, y;
+xic_set_preeditarea (struct window *w, int x, int y)
{
struct frame *f = XFRAME (w->frame);
XVaNestedList attr;
/* Place status area for XIC in bottom right corner of frame F.. */
void
-xic_set_statusarea (f)
- struct frame *f;
+xic_set_statusarea (struct frame *f)
{
XIC xic = FRAME_XIC (f);
XVaNestedList attr;
BASE_FONTNAME. Called when a new Emacs fontset is chosen. */
void
-xic_set_xfontset (f, base_fontname)
- struct frame *f;
- char *base_fontname;
+xic_set_xfontset (struct frame *f, const char *base_fontname)
{
XVaNestedList attr;
XFontSet xfs;
/* Create and set up the X widget for frame F. */
static void
-x_window (f, window_prompting, minibuffer_only)
- struct frame *f;
- long window_prompting;
- int minibuffer_only;
+x_window (struct frame *f, long window_prompting, int minibuffer_only)
{
XClassHint class_hints;
XSetWindowAttributes attributes;
XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++;
XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
+ XtSetArg (al[ac], XtNborderWidth, 0); ac++;
XtSetValues (pane_widget, al, ac);
f->output_data.x->column_widget = pane_widget;
XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++;
XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
+ XtSetArg (al[ac], XtNborderWidth, 0); ac++;
frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget,
al, ac);
#else /* not USE_X_TOOLKIT */
#ifdef USE_GTK
void
-x_window (f)
- FRAME_PTR f;
+x_window (FRAME_PTR f)
{
if (! xg_create_frame_widgets (f))
error ("Unable to create window");
/* Create and set up the X window for frame F. */
void
-x_window (f)
- struct frame *f;
-
+x_window (struct frame *f)
{
XClassHint class_hints;
XSetWindowAttributes attributes;
/* Verify that the icon position args for this window are valid. */
static void
-x_icon_verify (f, parms)
- struct frame *f;
- Lisp_Object parms;
+x_icon_verify (struct frame *f, Lisp_Object parms)
{
Lisp_Object icon_x, icon_y;
well. */
static void
-x_icon (f, parms)
- struct frame *f;
- Lisp_Object parms;
+x_icon (struct frame *f, Lisp_Object parms)
{
Lisp_Object icon_x, icon_y;
#if 0
mouse cursor and the gray border tile. */
static void
-x_make_gc (f)
- struct frame *f;
+x_make_gc (struct frame *f)
{
XGCValues gc_values;
/* Free what was allocated in x_make_gc. */
void
-x_free_gcs (f)
- struct frame *f;
+x_free_gcs (struct frame *f)
{
Display *dpy = FRAME_X_DISPLAY (f);
constructed. */
static Lisp_Object
-unwind_create_frame (frame)
- Lisp_Object frame;
+unwind_create_frame (Lisp_Object frame)
{
struct frame *f = XFRAME (frame);
static void
-x_default_font_parameter (f, parms)
- struct frame *f;
- Lisp_Object parms;
+x_default_font_parameter (struct frame *f, Lisp_Object parms)
{
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
RES_TYPE_STRING);
- Lisp_Object font;
- int got_from_gconf = 0;
+ Lisp_Object font = Qnil;
if (EQ (font_param, Qunbound))
font_param = Qnil;
if (NILP (font_param))
{
- /* System font takes precedendce over X resources. We must suggest this
+ /* System font should take precedendce over X resources. We suggest this
regardless of font-use-system-font because .emacs may not have been
read yet. */
const char *system_font = xsettings_get_system_font ();
- if (system_font) font_param = make_string (system_font,
- strlen (system_font));
+ if (system_font)
+ {
+ char *name = xstrdup (system_font);
+ font = font_open_by_name (f, name);
+ free (name);
+ }
}
-
- font = !NILP (font_param) ? font_param
- : x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
- if (! STRINGP (font))
+ if (NILP (font))
+ font = !NILP (font_param) ? font_param
+ : x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
+
+ if (! FONTP (font) && ! STRINGP (font))
{
char *names[]
= {
#ifdef HAVE_XFT
/* This will find the normal Xft font. */
- "monospace-12",
+ "monospace-10",
#endif
"-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1",
"-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1",
x_set_frame_parameters (f, Fcons (Fcons (Qfont_param, font_param), Qnil));
}
- x_default_parameter (f, parms, Qfont, font,
- got_from_gconf ? NULL : "font",
- got_from_gconf ? NULL : "Font",
- RES_TYPE_STRING);
+ /* This call will make X resources override any system font setting. */
+ x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
}
0, 1, 0,
doc: /* Send the size hints for frame FRAME to the window manager.
If FRAME is nil, use the selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
if (NILP (frame))
return Qnil;
}
+static void
+set_machine_and_pid_properties (struct frame *f)
+{
+ /* See the above comment "Note: Encoding strategy". */
+ XTextProperty text;
+ int bytes, stringp;
+ int do_free_text_value = 0;
+ long pid = (long) getpid ();
+
+ text.value = x_encode_text (Vsystem_name,
+ Qcompound_text, 0, &bytes, &stringp,
+ &do_free_text_value);
+ text.encoding = (stringp ? XA_STRING
+ : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
+ text.format = 8;
+ text.nitems = bytes;
+ XSetWMClientMachine (FRAME_X_DISPLAY (f),
+ FRAME_OUTER_WINDOW (f),
+ &text);
+ if (do_free_text_value)
+ xfree (text.value);
+
+ XChangeProperty (FRAME_X_DISPLAY (f),
+ FRAME_OUTER_WINDOW (f),
+ XInternAtom (FRAME_X_DISPLAY (f),
+ "_NET_WM_PID",
+ False),
+ XA_CARDINAL, 32, PropModeReplace,
+ (unsigned char *) &pid, 1);
+}
+
DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
1, 1, 0,
doc: /* Make a new X window, which is called a "frame" in Emacs terms.
be shared by the new frame.
This function is an internal primitive--use `make-frame' instead. */)
- (parms)
- Lisp_Object parms;
+ (Lisp_Object parms)
{
struct frame *f;
Lisp_Object frame, tem;
f->output_method = output_x_window;
f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output));
- bzero (f->output_data.x, sizeof (struct x_output));
+ memset (f->output_data.x, 0, sizeof (struct x_output));
f->output_data.x->icon_bitmap = -1;
FRAME_FONTSET (f) = -1;
f->output_data.x->scroll_bar_foreground_pixel = -1;
error ("Invalid frame font");
}
-#ifdef USE_LUCID
- /* Prevent lwlib/xlwmenu.c from crashing because of a bug
- whereby it fails to get any font. */
- xlwmenu_default_font = XLoadQueryFont (FRAME_X_DISPLAY (f), "fixed");
-#endif
-
/* Frame contents get displaced if an embedded X window has a border. */
if (! FRAME_X_EMBEDDED_P (f))
- x_default_parameter (f, parms, Qborder_width, make_number (2),
+ x_default_parameter (f, parms, Qborder_width, make_number (0),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
/* This defaults to 1 in order to match xterm. We recognize either
#endif
"internalBorderWidth", "internalBorderWidth",
RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qvertical_scroll_bars, Qleft,
+ x_default_parameter (f, parms, Qvertical_scroll_bars,
+#if defined(USE_GTK) && defined(USE_TOOLKIT_SCROLL_BARS)
+ Qright,
+#else
+ Qleft,
+#endif
"verticalScrollBars", "ScrollBars",
RES_TYPE_SYMBOL);
happen. */
init_frame_faces (f);
- x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1),
- "menuBar", "MenuBar", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qtool_bar_lines, make_number (1),
- "toolBar", "ToolBar", RES_TYPE_NUMBER);
+ /* The X resources controlling the menu-bar and tool-bar are
+ processed specially at startup, and reflected in the mode
+ variables; ignore them here. */
+ x_default_parameter (f, parms, Qmenu_bar_lines,
+ NILP (Vmenu_bar_mode)
+ ? make_number (0) : make_number (1),
+ NULL, NULL, RES_TYPE_NUMBER);
+ x_default_parameter (f, parms, Qtool_bar_lines,
+ NILP (Vtool_bar_mode)
+ ? make_number (0) : make_number (1),
+ NULL, NULL, RES_TYPE_NUMBER);
+
x_default_parameter (f, parms, Qbuffer_predicate, Qnil,
"bufferPredicate", "BufferPredicate",
RES_TYPE_SYMBOL);
;
}
+ BLOCK_INPUT;
+
+ /* Set machine name and pid for the purpose of window managers. */
+ set_machine_and_pid_properties(f);
+
/* Set the WM leader property. GTK does this itself, so this is not
needed when using GTK. */
if (dpyinfo->client_leader_window != 0)
{
- BLOCK_INPUT;
XChangeProperty (FRAME_X_DISPLAY (f),
FRAME_OUTER_WINDOW (f),
dpyinfo->Xatom_wm_client_leader,
XA_WINDOW, 32, PropModeReplace,
(unsigned char *) &dpyinfo->client_leader_window, 1);
- UNBLOCK_INPUT;
}
+ UNBLOCK_INPUT;
+
/* Initialize `default-minibuffer-frame' in case this is the first
frame on this terminal. */
if (FRAME_HAS_MINIBUF_P (f)
know about that structure. */
Lisp_Object
-x_get_focus_frame (frame)
- struct frame *frame;
+x_get_focus_frame (struct frame *frame)
{
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame);
Lisp_Object xfocus;
DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
doc: /* Set the input focus to FRAME.
FRAME nil means use the selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f = check_x_frame (frame);
Display *dpy = FRAME_X_DISPLAY (f);
\f
DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
doc: /* Internal function called by `color-defined-p', which see. */)
- (color, frame)
- Lisp_Object color, frame;
+ (Lisp_Object color, Lisp_Object frame)
{
XColor foo;
FRAME_PTR f = check_x_frame (frame);
DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
doc: /* Internal function called by `color-values', which see. */)
- (color, frame)
- Lisp_Object color, frame;
+ (Lisp_Object color, Lisp_Object frame)
{
XColor foo;
FRAME_PTR f = check_x_frame (frame);
DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0,
doc: /* Internal function called by `display-color-p', which see. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
char *vendor = ServerVendor (dpyinfo->display);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
Display *dpy = dpyinfo->display;
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
Lisp_Object result;
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
Lisp_Object result;
The optional argument TERMINAL specifies which display to ask about.
TERMINAL should be a terminal object, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
}
\f
int
-x_pixel_width (f)
- register struct frame *f;
+x_pixel_width (register struct frame *f)
{
return FRAME_PIXEL_WIDTH (f);
}
int
-x_pixel_height (f)
- register struct frame *f;
+x_pixel_height (register struct frame *f)
{
return FRAME_PIXEL_HEIGHT (f);
}
int
-x_char_width (f)
- register struct frame *f;
+x_char_width (register struct frame *f)
{
return FRAME_COLUMN_WIDTH (f);
}
int
-x_char_height (f)
- register struct frame *f;
+x_char_height (register struct frame *f)
{
return FRAME_LINE_HEIGHT (f);
}
int
-x_screen_planes (f)
- register struct frame *f;
+x_screen_planes (register struct frame *f)
{
return FRAME_X_DISPLAY_INFO (f)->n_planes;
}
members of DPYINFO appropriately. Called from x_term_init. */
void
-select_visual (dpyinfo)
- struct x_display_info *dpyinfo;
+select_visual (struct x_display_info *dpyinfo)
{
Display *dpy = dpyinfo->display;
Screen *screen = dpyinfo->screen;
XVisualInfo vinfo;
strcpy (s, SDATA (value));
- dash = index (s, '-');
+ dash = strchr (s, '-');
if (dash)
{
dpyinfo->n_planes = atoi (dash + 1);
vinfo_template.screen = XScreenNumberOfScreen (screen);
vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask,
&vinfo_template, &n_visuals);
- if (n_visuals != 1)
+ if (n_visuals <= 0)
fatal ("Can't get proper X visual info");
dpyinfo->n_planes = vinfo->depth;
Open a new connection if necessary. */
struct x_display_info *
-x_display_info_for_name (name)
- Lisp_Object name;
+x_display_info_for_name (Lisp_Object name)
{
Lisp_Object names;
struct x_display_info *dpyinfo;
Optional second arg XRM-STRING is a string of resources in xrdb format.
If the optional third arg MUST-SUCCEED is non-nil,
terminate Emacs if we can't open the connection. */)
- (display, xrm_string, must_succeed)
- Lisp_Object display, xrm_string, must_succeed;
+ (Lisp_Object display, Lisp_Object xrm_string, Lisp_Object must_succeed)
{
unsigned char *xrm_option;
struct x_display_info *dpyinfo;
For TERMINAL, specify a terminal object, a frame or a display name (a
string). If TERMINAL is nil, that stands for the selected frame's
terminal. */)
- (terminal)
- Lisp_Object terminal;
+ (Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
doc: /* Return the list of display names that Emacs has connections to. */)
- ()
+ (void)
{
Lisp_Object tail, result;
The optional second argument TERMINAL specifies which display to act on.
TERMINAL should be a terminal object, a frame or a display name (a string).
If TERMINAL is omitted or nil, that stands for the selected frame's display. */)
- (on, terminal)
- Lisp_Object terminal, on;
+ (Lisp_Object on, Lisp_Object terminal)
{
struct x_display_info *dpyinfo = check_x_display_info (terminal);
/* Wait for responses to all X commands issued so far for frame F. */
void
-x_sync (f)
- FRAME_PTR f;
+x_sync (FRAME_PTR f)
{
BLOCK_INPUT;
XSync (FRAME_X_DISPLAY (f), False);
FRAME. Default is to change on the edit X window.
Value is VALUE. */)
- (prop, value, frame, type, format, outer_p)
- Lisp_Object prop, value, frame, type, format, outer_p;
+ (Lisp_Object prop, Lisp_Object value, Lisp_Object frame, Lisp_Object type, Lisp_Object format, Lisp_Object outer_p)
{
struct frame *f = check_x_frame (frame);
Atom prop_atom;
Sx_delete_window_property, 1, 2, 0,
doc: /* Remove window property PROP from X window of FRAME.
FRAME nil or omitted means use the selected frame. Value is PROP. */)
- (prop, frame)
- Lisp_Object prop, frame;
+ (Lisp_Object prop, Lisp_Object frame)
{
struct frame *f = check_x_frame (frame);
Atom prop_atom;
Value is nil if FRAME hasn't a property with name PROP or if PROP has
no value of TYPE. */)
- (prop, frame, type, source, delete_p, vector_ret_p)
- Lisp_Object prop, frame, type, source, delete_p, vector_ret_p;
+ (Lisp_Object prop, Lisp_Object frame, Lisp_Object type, Lisp_Object source, Lisp_Object delete_p, Lisp_Object vector_ret_p)
{
struct frame *f = check_x_frame (frame);
Atom prop_atom;
elements."
This applies even if long is more than 32 bits, the X library
converts from 32 bit elements received from the X server to long
- and passes the long array to us. Thus, for that case bcopy can not
+ and passes the long array to us. Thus, for that case memcpy can not
be used. We convert to a 32 bit type here, because so much code
assume on that.
shown on the frames. */
void
-show_hourglass (timer)
- struct atimer *timer;
+show_hourglass (struct atimer *timer)
{
/* The timer implementation will cancel this timer automatically
after this function has run. Set hourglass_atimer to null
shown. */
void
-hide_hourglass ()
+hide_hourglass (void)
{
if (hourglass_shown_p)
{
Tool tips
***********************************************************************/
-static Lisp_Object x_create_tip_frame P_ ((struct x_display_info *,
- Lisp_Object, Lisp_Object));
-static void compute_tip_xy P_ ((struct frame *, Lisp_Object, Lisp_Object,
- Lisp_Object, int, int, int *, int *));
+static Lisp_Object x_create_tip_frame (struct x_display_info *,
+ Lisp_Object, Lisp_Object);
+static void compute_tip_xy (struct frame *, Lisp_Object, Lisp_Object,
+ Lisp_Object, int, int, int *, int *);
/* The frame of a currently visible tooltip. */
static Lisp_Object
-unwind_create_tip_frame (frame)
- Lisp_Object frame;
+unwind_create_tip_frame (Lisp_Object frame)
{
Lisp_Object deleted;
when this happens. */
static Lisp_Object
-x_create_tip_frame (dpyinfo, parms, text)
- struct x_display_info *dpyinfo;
- Lisp_Object parms, text;
+x_create_tip_frame (struct x_display_info *dpyinfo, Lisp_Object parms, Lisp_Object text)
{
struct frame *f;
Lisp_Object frame, tem;
counts etc. */
f->output_method = output_x_window;
f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output));
- bzero (f->output_data.x, sizeof (struct x_output));
+ memset (f->output_data.x, 0, sizeof (struct x_output));
f->output_data.x->icon_bitmap = -1;
FRAME_FONTSET (f) = -1;
f->output_data.x->scroll_bar_foreground_pixel = -1;
needed to determine window geometry. */
x_default_font_parameter (f, parms);
- x_default_parameter (f, parms, Qborder_width, make_number (2),
+ x_default_parameter (f, parms, Qborder_width, make_number (0),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
/* This defaults to 2 in order to match xterm. We recognize either
change_frame_size (f, height, width, 1, 0, 0);
/* Add `tooltip' frame parameter's default value. */
- if (NILP (Fframe_parameter (frame, intern ("tooltip"))))
- Fmodify_frame_parameters (frame, Fcons (Fcons (intern ("tooltip"), Qt),
- Qnil));
+ if (NILP (Fframe_parameter (frame, Qtooltip)))
+ Fmodify_frame_parameters (frame, Fcons (Fcons (Qtooltip, Qt), Qnil));
/* FIXME - can this be done in a similar way to normal frames?
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00641.html */
the display in *ROOT_X, and *ROOT_Y. */
static void
-compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
- struct frame *f;
- Lisp_Object parms, dx, dy;
- int width, height;
- int *root_x, *root_y;
+compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object dy, int width, int height, int *root_x, int *root_y)
{
Lisp_Object left, top;
int win_x, win_y;
A tooltip's maximum size is specified by `x-max-tooltip-size'.
Text larger than the specified size is clipped. */)
- (string, frame, parms, timeout, dx, dy)
- Lisp_Object string, frame, parms, timeout, dx, dy;
+ (Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
{
struct frame *f;
struct window *w;
clear_glyph_matrix (w->desired_matrix);
clear_glyph_matrix (w->current_matrix);
SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
- try_window (FRAME_ROOT_WINDOW (f), pos, 0);
+ try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
/* Compute width and height of the tooltip. */
width = height = 0;
/* Let the row go over the full width of the frame. */
row->full_width_p = 1;
+ row_width = row->pixel_width;
/* There's a glyph at the end of rows that is used to place
the cursor there. Don't include the width of this glyph. */
if (row->used[TEXT_AREA])
{
last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
- row_width = row->pixel_width - last->pixel_width;
+ if (INTEGERP (last->object))
+ row_width -= last->pixel_width;
}
- else
- row_width = row->pixel_width;
height += row->height;
width = max (width, row_width);
DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
doc: /* Hide the current tooltip window, if there is any.
Value is t if tooltip was open, nil otherwise. */)
- ()
+ (void)
{
int count;
Lisp_Object deleted, frame, timer;
{
struct frame *f = SELECTED_FRAME ();
Widget w = f->output_data.x->menubar_widget;
- extern void xlwmenu_redisplay P_ ((Widget));
if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen)
&& w != NULL)
Sx_uses_old_gtk_dialog,
0, 0, 0,
doc: /* Return t if the old Gtk+ file selection dialog is used. */)
- ()
+ (void)
{
#ifdef USE_GTK
extern int use_dialog_box;
Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file
selection box, if specified. If MUSTMATCH is non-nil, the returned file
or directory must exist. ONLY-DIR-P is ignored." */)
- (prompt, dir, default_filename, mustmatch, only_dir_p)
- Lisp_Object prompt, dir, default_filename, mustmatch, only_dir_p;
+ (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p)
{
int result;
struct frame *f = SELECTED_FRAME ();
#ifdef USE_GTK
static Lisp_Object
-clean_up_dialog (arg)
- Lisp_Object arg;
+clean_up_dialog (Lisp_Object arg)
{
x_menu_set_in_use (0);
selection box, if specified. If MUSTMATCH is non-nil, the returned file
or directory must exist. If ONLY-DIR-P is non-nil, the user can only select
directories. */)
- (prompt, dir, default_filename, mustmatch, only_dir_p)
- Lisp_Object prompt, dir, default_filename, mustmatch, only_dir_p;
+ (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p)
{
FRAME_PTR f = SELECTED_FRAME ();
char *fn;
Return a GTK-style font string corresponding to the selection.
If FRAME is omitted or nil, it defaults to the selected frame. */)
- (frame, ignored)
- Lisp_Object frame, ignored;
+ (Lisp_Object frame, Lisp_Object ignored)
{
FRAME_PTR f = check_x_frame (frame);
char *name;
Value is t if we know that both keys are present, and are mapped to the
usual X keysyms. Value is `lambda' if we cannot determine if both keys are
present and mapped to the usual X keysyms. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
#ifdef HAVE_XKBGETKEYBOARD
XkbDescPtr kb;
/* The XKB symbolic key names can be seen most easily in
the PS file generated by `xkbprint -label name
$DISPLAY'. */
- if (bcmp ("DELE", kb->names->keys[i].name, 4) == 0)
+ if (memcmp ("DELE", kb->names->keys[i].name, 4) == 0)
delete_keycode = i;
- else if (bcmp ("BKSP", kb->names->keys[i].name, 4) == 0)
+ else if (memcmp ("BKSP", kb->names->keys[i].name, 4) == 0)
backspace_keycode = i;
}
};
void
-syms_of_xfns ()
+syms_of_xfns (void)
{
/* This is zero if not using X windows. */
x_in_use = 0;