summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2004-12-12 11:37:09 +0000
committerBram Moolenaar <Bram@vim.org>2004-12-12 11:37:09 +0000
commit46c9c73de8def79baf8f0a34a12549f6c14944f3 (patch)
tree8a88c07c5a43bea782eb1afa74b73d3e9feb6e76 /src
parentd8b0cf1cc5231e19116cc3208b680a07f842bfe9 (diff)
downloadvim-git-46c9c73de8def79baf8f0a34a12549f6c14944f3.tar.gz
updated for version 7.0022v7.0022
Diffstat (limited to 'src')
-rw-r--r--src/eval.c41
-rw-r--r--src/gui_gtk_x11.c30
-rw-r--r--src/gui_x11.c14
-rw-r--r--src/proto/gui_amiga.pro2
-rw-r--r--src/proto/gui_x11.pro1
-rw-r--r--src/ui.c8
6 files changed, 91 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c
index 27783792f..b5b4b792a 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -300,6 +300,7 @@ static void f_getcharmod __ARGS((VAR argvars, VAR retvar));
static void f_getcmdline __ARGS((VAR argvars, VAR retvar));
static void f_getcmdpos __ARGS((VAR argvars, VAR retvar));
static void f_getcwd __ARGS((VAR argvars, VAR retvar));
+static void f_getfontname __ARGS((VAR argvars, VAR retvar));
static void f_getfperm __ARGS((VAR argvars, VAR retvar));
static void f_getfsize __ARGS((VAR argvars, VAR retvar));
static void f_getftime __ARGS((VAR argvars, VAR retvar));
@@ -2864,6 +2865,7 @@ static struct fst
{"getcmdline", 0, 0, f_getcmdline},
{"getcmdpos", 0, 0, f_getcmdpos},
{"getcwd", 0, 0, f_getcwd},
+ {"getfontname", 0, 1, f_getfontname},
{"getfperm", 1, 1, f_getfperm},
{"getfsize", 1, 1, f_getfsize},
{"getftime", 1, 1, f_getftime},
@@ -4732,6 +4734,45 @@ f_getcwd(argvars, retvar)
}
/*
+ * "getfontname()" function
+ */
+ static void
+f_getfontname(argvars, retvar)
+ VAR argvars;
+ VAR retvar;
+{
+ retvar->var_type = VAR_STRING;
+ retvar->var_val.var_string = NULL;
+#ifdef FEAT_GUI
+ if (gui.in_use)
+ {
+ GuiFont font;
+ char_u *name = NULL;
+
+ if (argvars[0].var_type == VAR_UNKNOWN)
+ {
+ /* Get the "Normal" font. Either the name saved by
+ * hl_set_font_name() or from the font ID. */
+ font = gui.norm_font;
+ name = hl_get_font_name();
+ }
+ else
+ {
+ name = get_var_string(&argvars[0]);
+ if (STRCMP(name, "*") == 0) /* don't use font dialog */
+ return;
+ font = gui_mch_get_font(name, FALSE);
+ if (font == NOFONT)
+ return; /* Invalid font name, return empty string. */
+ }
+ retvar->var_val.var_string = gui_mch_get_fontname(font, name);
+ if (argvars[0].var_type != VAR_UNKNOWN)
+ gui_mch_free_font(font);
+ }
+#endif
+}
+
+/*
* "getfperm({fname})" function
*/
static void
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index b67b6f2d2..34bbed533 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -2722,7 +2722,7 @@ mainwin_screen_changed_cb(GtkWidget *widget,
if (gui.norm_font != NULL)
{
- gui_mch_init_font(p_guifont, 0);
+ gui_mch_init_font(p_guifont, FALSE);
gui_set_shellsize(FALSE, FALSE);
}
}
@@ -4792,6 +4792,34 @@ gui_mch_get_font(char_u *name, int report_error)
return font;
}
+/*
+ * Return the name of font "font" in allocated memory.
+ */
+/*ARGSUSED*/
+ char_u *
+gui_mch_get_fontname(GuiFont font, char_u *name)
+{
+#ifdef HAVE_GTK2
+ if (font != NOFONT)
+ {
+ char *name = pango_font_description_to_string(font);
+
+ if (name != NULL)
+ {
+ char_u *s = vim_strsave((char_u *)name);
+
+ g_free(name);
+ return s;
+ }
+ }
+#else
+ /* Don't know how to get the name, return what we got. */
+ if (name != NULL)
+ return vim_strsave(name);
+#endif
+ return NULL;
+}
+
#if !defined(HAVE_GTK2) || defined(PROTO)
/*
* Set the current text font.
diff --git a/src/gui_x11.c b/src/gui_x11.c
index e57bb9279..90e6fbd94 100644
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -1988,6 +1988,20 @@ gui_mch_get_font(name, giveErrorIfMissing)
return (GuiFont)font;
}
+/*
+ * Return the name of font "font" in allocated memory.
+ * Don't know how to get the actual name, thus use the provided name.
+ */
+ char_u *
+gui_mch_get_fontname(font, name)
+ GuiFont font;
+ char_u *name;
+{
+ if (name == NULL)
+ return NULL;
+ return vim_strsave(name);
+}
+
int
gui_mch_adjust_charsize()
{
diff --git a/src/proto/gui_amiga.pro b/src/proto/gui_amiga.pro
index ec70bc102..2f8d2ac59 100644
--- a/src/proto/gui_amiga.pro
+++ b/src/proto/gui_amiga.pro
@@ -20,9 +20,11 @@ void gui_mch_set_scrollbar_thumb __ARGS((scrollbar_T *sb, long val, long size, l
void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
+char_u *gui_mch_getfontname __ARGS((GuiFont font));
int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
int gui_mch_adjust_charsize __ARGS((void));
GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
void gui_mch_set_font __ARGS((GuiFont font));
void gui_mch_free_font __ARGS((GuiFont font));
guicolor_T gui_mch_get_color __ARGS((char_u *name));
diff --git a/src/proto/gui_x11.pro b/src/proto/gui_x11.pro
index 6524c265d..035c27f95 100644
--- a/src/proto/gui_x11.pro
+++ b/src/proto/gui_x11.pro
@@ -15,6 +15,7 @@ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min
void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
int gui_mch_adjust_charsize __ARGS((void));
void gui_mch_set_font __ARGS((GuiFont font));
void gui_mch_set_fontset __ARGS((GuiFontset fontset));
diff --git a/src/ui.c b/src/ui.c
index 3963bd545..ac88dc6ab 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -177,11 +177,11 @@ ui_inchar(buf, maxlen, wtime, tb_change_cnt)
else
# endif
{
- if (wtime == -1)
- handle_sighup(SIGHUP_UNBLOCK); /* allow SIGHUP to kill us */
+ if (wtime == -1 || wtime > 100L)
+ (void)handle_signal(SIGNAL_UNBLOCK); /* allow signals to kill us */
retval = mch_inchar(buf, maxlen, wtime, tb_change_cnt);
- if (wtime == -1)
- handle_sighup(SIGHUP_BLOCK); /* block SIGHUP */
+ if (wtime == -1 || wtime > 100L)
+ (void)handle_signal(SIGNAL_BLOCK); /* block SIGHUP et al. */
}
#endif