]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/xwidget.c: Add a `query-on-exit' flag to determine whether we can
authorGrégoire Jadi <gregoire.jadi@gmail.com>
Tue, 16 Jul 2013 17:39:20 +0000 (19:39 +0200)
committerGrégoire Jadi <gregoire.jadi@gmail.com>
Tue, 16 Jul 2013 17:39:20 +0000 (19:39 +0200)
kill xwidget when the buffer is killed without confirmation.
(Fset_xwidget_query_on_exit_flag): New function to set the `query-on-exit'
flag.
(Fxwidget_query_on_exit_flag): New function to retrieve the value of the
`query-on-exit' flag.
(Fmake_xwidget): Set the `query-on-exit' flag to t by default.
* src/xwidget.h (xwidget): Add new field `kill_without_query'.
* lisp/xwidget.el (xwidget-kill-buffer-query-function): Ask for
confirmation before killing the buffer if a xwidget is present only if its
`query-on-exit' flag is enabled.

lisp/xwidget.el
src/xwidget.c
src/xwidget.h

index 4d2453e9d2d69c00497d535c2d254fe32066ffd1..5d04618209c5a562103100d164afbb0433c6e01d 100644 (file)
@@ -458,6 +458,7 @@ It can be retrieved with `(xwidget-get XWIDGET PROPNAME)'."
   "Ask beforek illing a buffer that has xwidgets."
   (let ((xwidgets (get-buffer-xwidgets (current-buffer))))
     (or (not xwidgets)
+        (not (memq t (mapcar 'xwidget-query-on-exit-flag xwidgets)))
         (yes-or-no-p
          (format "Buffer %S has xwidgets; kill it? "
                  (buffer-name (current-buffer)))))))
index 7834e5b0beafc8e1ca175cc27c182b781c30b631..9a039d9a745b86479dcd1c2110839ab83a2e5c39 100644 (file)
@@ -209,6 +209,7 @@ TYPE is a symbol which can take one of the following values:
   
   xw->height = XFASTINT(height);
   xw->width = XFASTINT(width);
+  xw->kill_without_query = 1;
   XSETXWIDGET (val, xw); // set the vectorlike_header of VAL with the correct value
   Vxwidget_list = Fcons (val, Vxwidget_list);
   xw->widgetwindow_osr = NULL;
@@ -1598,6 +1599,30 @@ DEFUN ("set-xwidget-plist", Fset_xwidget_plist, Sset_xwidget_plist,
   return plist;
 }
 
+DEFUN ("set-xwidget-query-on-exit-flag",
+       Fset_xwidget_query_on_exit_flag, Sset_xwidget_query_on_exit_flag,
+       2, 2, 0,
+       doc: /* Specify if query is needed for XWIDGET when Emacs is
+exited.  If the second argument FLAG is non-nil, Emacs will query the
+user before exiting or killing a buffer if XWIDGET is running.  This
+function returns FLAG. */)
+  (Lisp_Object xwidget, Lisp_Object flag)
+{
+  CHECK_XWIDGET (xwidget);
+  XXWIDGET (xwidget)->kill_without_query = NILP (flag);
+  return flag;
+}
+
+DEFUN ("xwidget-query-on-exit-flag",
+       Fxwidget_query_on_exit_flag, Sxwidget_query_on_exit_flag,
+       1, 1, 0,
+       doc: /* Return the current value of query-on-exit flag for XWIDGET. */)
+  (Lisp_Object xwidget)
+{
+  CHECK_XWIDGET (xwidget);
+  return (XXWIDGET (xwidget)->kill_without_query ? Qnil : Qt);
+}
+
 void
 syms_of_xwidget (void)
 {
@@ -1615,6 +1640,8 @@ syms_of_xwidget (void)
   defsubr (&Sxwidget_view_model);
   defsubr (&Sxwidget_view_window);
   defsubr (&Sxwidget_view_lookup);
+  defsubr (&Sxwidget_query_on_exit_flag);
+  defsubr (&Sset_xwidget_query_on_exit_flag);
 
 #ifdef HAVE_WEBKIT_OSR
   defsubr (&Sxwidget_webkit_goto_uri);
index 01be2b292814e5de6c79a3ba71fadc87278de18d..1495c5bef5a34184a6262b30f682b8a64b63e270 100644 (file)
@@ -34,6 +34,8 @@ struct xwidget{
   //for offscreen widgets, unused if not osr
   GtkWidget* widget_osr;
   GtkContainer* widgetwindow_osr;
+  /* Non-nil means kill silently if Emacs is exited. */
+  unsigned int kill_without_query : 1;
 
   //TODO these are WIP