]> code.delx.au - gnu-emacs-elpa/blobdiff - gnome-c-snippet.el
maint: Fix license notice
[gnu-emacs-elpa] / gnome-c-snippet.el
index 0f18834f1b2dfab5a33873014c57fe9aa3c23db6..239f148bc17784da8319f92d497a90c5615ceb13 100644 (file)
@@ -1,24 +1,27 @@
 ;;; gnome-c-snippet.el --- GNOME-style code generation -*- lexical-binding: t; -*-
-;; Copyright (C) 2016 Daiki Ueno <ueno@gnu.org>
+;; Copyright (C) 2016 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;; Keywords: GNOME, C, coding style
 
-;; This file is not part of GNU Emacs.
+;; This file is part of GNU Emacs.
 
-;; This program is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see
-;; <http://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; FIXME: The snippets defined here could be rewritten in yasnippet
 
 ;;; Code:
 
@@ -171,9 +174,9 @@ G_DECLARE_" (if derivable "DERIVABLE" "FINAL") "_TYPE (" (gnome-c-snippet--forma
 "))
 
 (defun gnome-c-snippet-insert-final-class-declaration (package
-                                                    class
-                                                    parent-package
-                                                    parent-class)
+                                                      class
+                                                      parent-package
+                                                      parent-class)
   "Insert final class declaration for PACKAGE and CLASS."
   (interactive
    (append (gnome-c-snippet--read-package-and-class
@@ -192,9 +195,9 @@ G_DECLARE_" (if derivable "DERIVABLE" "FINAL") "_TYPE (" (gnome-c-snippet--forma
                                             nil))
 
 (defun gnome-c-snippet-insert-derivable-class-declaration (package
-                                                        class
-                                                        parent-package
-                                                        parent-class)
+                                                          class
+                                                          parent-package
+                                                          parent-class)
   "Insert derivable class declaration for PACKAGE and CLASS."
   (interactive
    (append (gnome-c-snippet--read-package-and-class
@@ -213,9 +216,9 @@ G_DECLARE_" (if derivable "DERIVABLE" "FINAL") "_TYPE (" (gnome-c-snippet--forma
                                             t))
 
 (defun gnome-c-snippet-insert-interface-definition (package
-                                                 iface
-                                                 parent-package
-                                                 parent-class)
+                                                   iface
+                                                   parent-package
+                                                   parent-class)
   "Insert class definition for PACKAGE and CLASS."
   (interactive
    (append (gnome-c-snippet--read-package-and-class
@@ -238,10 +241,10 @@ G_DEFINE_INTERFACE (" (gnome-c-snippet--format-PackageClass package iface) ", "
 "))
 
 (defun gnome-c-snippet--insert-class-definition (package
-                                              class
-                                              parent-package
-                                              parent-class
-                                              abstract)
+                                                class
+                                                parent-package
+                                                parent-class
+                                                abstract)
   (insert "\
 G_DEFINE_" (if abstract "ABSTRACT_" "") "TYPE (" (gnome-c-snippet--format-PackageClass package class) ", "
 (gnome-c-snippet--format-package_class package class) ", " (gnome-c-snippet--format-PACKAGE parent-package) "_TYPE_" (gnome-c-snippet--format-CLASS parent-class) ")
@@ -258,9 +261,9 @@ static void
 "))
 
 (defun gnome-c-snippet-insert-class-definition (package
-                                             class
-                                             parent-package
-                                             parent-class)
+                                               class
+                                               parent-package
+                                               parent-class)
   "Insert class definition for PACKAGE and CLASS."
   (interactive
    (append (gnome-c-snippet--read-package-and-class
@@ -273,15 +276,15 @@ static void
            'gnome-c-snippet-parent-package
            'gnome-c-snippet-parent-class)))
   (gnome-c-snippet--insert-class-definition package
-                                         class
-                                         parent-package
-                                         parent-class
-                                         nil))
+                                           class
+                                           parent-package
+                                           parent-class
+                                           nil))
 
 (defun gnome-c-snippet-insert-abstract-class-definition (package
-                                                      class
-                                                      parent-package
-                                                      parent-class)
+                                                        class
+                                                        parent-package
+                                                        parent-class)
   "Insert abstract class definition for PACKAGE and CLASS."
   (interactive
    (append (gnome-c-snippet--read-package-and-class
@@ -294,10 +297,10 @@ static void
            'gnome-c-snippet-parent-package
            'gnome-c-snippet-parent-class)))
   (gnome-c-snippet--insert-class-definition package
-                                         class
-                                         parent-package
-                                         parent-class
-                                         t))
+                                           class
+                                           parent-package
+                                           parent-class
+                                           t))
 
 (defun gnome-c-snippet-insert-constructor (package class)
   "Insert 'constructor' vfunc of GObjectClass for PACKAGE and CLASS."
@@ -318,14 +321,14 @@ GObjectConstructParam *construct_properties)\n")
     (if gnome-c-snippet-align-arglist
        (progn
          (goto-char arglist-start)
-         (gnome-c-align-at-point))
+         (gnome-c-align-arglist-at-point))
       (indent-region arglist-start (point)))
     (goto-char body-start)
     (insert "{
   " (gnome-c-snippet--format-PackageClass package class) " *self = "
   (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
 
-  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) "_parent_class)->constructed (object);
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) "_parent_class)->constructed (type, n_construct_properties, construct_properties);
 }
 ")
     (indent-region body-start (point))))
@@ -350,7 +353,7 @@ GParamSpec *pspec)\n")
     (if gnome-c-snippet-align-arglist
        (progn
          (goto-char arglist-start)
-         (gnome-c-align-at-point))
+         (gnome-c-align-arglist-at-point))
       (indent-region arglist-start (point)))
     (goto-char body-start)
     (insert "{
@@ -387,12 +390,12 @@ GParamSpec *pspec)\n")
     (if gnome-c-snippet-align-arglist
        (progn
          (goto-char arglist-start)
-         (gnome-c-align-at-point))
+         (gnome-c-align-arglist-at-point))
       (indent-region arglist-start (point)))
     (goto-char body-start)
     (insert "{
   " (gnome-c-snippet--format-PackageClass package class) " *self = "
-(gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
 
   switch (prop_id)
     {
@@ -446,6 +449,38 @@ static void
 ")
     (indent-region body-start (point))))
 
+(defun gnome-c-snippet-insert-dispatch_properties_changed (package class)
+  "Insert 'dispatch_properties_changed vfunc of GObjectClass for
+PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (arglist-start body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_dispatch_properties_changed (")
+    (setq arglist-start (point-marker))
+    (insert "GObject *object,
+guint n_pspecs,
+GParamSpec **pspecs)\n")
+    (setq body-start (point-marker))
+    (if gnome-c-snippet-align-arglist
+       (progn
+         (goto-char arglist-start)
+         (gnome-c-align-arglist-at-point))
+      (indent-region arglist-start (point)))
+    (goto-char body-start)
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) "_parent_class)->dispatch_properties_changed (object, n_pspecs, pspecs);
+}
+")
+    (indent-region body-start (point))))
+
 (defun gnome-c-snippet-insert-notify (package class)
   "Insert 'notify' vfunc of GObjectClass for PACKAGE and CLASS."
   (interactive
@@ -453,16 +488,24 @@ static void
     nil nil
     'gnome-c-snippet-package
     'gnome-c-snippet-class))
-  (let (body-start)
+  (let (arglist-start body-start)
     (insert "\
 static void
-" (gnome-c-snippet--format-package_class package class) "_notify (GObject *object)\n")
+" (gnome-c-snippet--format-package_class package class) "_notify (")
+    (setq arglist-start (point-marker))
+    (insert "GObject *object,
+GParamSpec *pspec)\n")
     (setq body-start (point-marker))
+    (if gnome-c-snippet-align-arglist
+       (progn
+         (goto-char arglist-start)
+         (gnome-c-align-arglist-at-point))
+      (indent-region arglist-start (point)))
     (insert "{
   " (gnome-c-snippet--format-PackageClass package class) " *self = "
   (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
 
-  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) "_parent_class)->finalize (object);
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) "_parent_class)->notify (object, pspec);
 }
 ")
     (indent-region body-start (point))))
@@ -502,7 +545,8 @@ static void
     ("GObjectClass.get_property" . gnome-c-snippet-insert-get_property)
     ("GObjectClass.dispose" . gnome-c-snippet-insert-dispose)
     ("GObjectClass.finalize" . gnome-c-snippet-insert-finalize)
-    ;; GObjectClass.dispatch_properties_changed
+    ("GObjectClass.dispatch_properties_changed" .
+     gnome-c-snippet-insert-dispatch_properties_changed)
     ("GObjectClass.notify" . gnome-c-snippet-insert-notify)
     ("GObjectClass.contructed" . gnome-c-snippet-insert-constructed)))