[entangle/f13/master] Update to 0.2.0 release Fix crash when camera has no control widgets (rhbz #628163)

Daniel P. Berrange berrange at fedoraproject.org
Wed Oct 6 17:30:39 UTC 2010


commit 9becfb4c78160a48f6110915ad44b493797e6df1
Author: Daniel P. Berrange <berrange at redhat.com>
Date:   Wed Oct 6 18:30:01 2010 +0100

    Update to 0.2.0 release
    Fix crash when camera has no control widgets (rhbz #628163)

 .gitignore                          |    1 +
 entangle-0.1.0-udev-crash.patch     |   25 -----
 entangle-0.2.0-controls-empty.patch |  194 +++++++++++++++++++++++++++++++++++
 entangle.spec                       |   50 +++++-----
 sources                             |    2 +-
 5 files changed, 221 insertions(+), 51 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index f31f47e..e999053 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
 x86_64
 entangle-?.?.?
 *.src.rpm
+
diff --git a/entangle-0.2.0-controls-empty.patch b/entangle-0.2.0-controls-empty.patch
new file mode 100644
index 0000000..039f7f6
--- /dev/null
+++ b/entangle-0.2.0-controls-empty.patch
@@ -0,0 +1,194 @@
+commit 0473f3dab7ca9ea091ed60e20753aa0133f9d1fb
+Author: Daniel P. Berrange <berrange at redhat.com>
+Date:   Wed Oct 6 18:14:18 2010 +0100
+
+    Update to cope with cameras which have no controls
+    
+    Some camera drivers claim to support controls, but then don't
+    return any. This updates the UI code to cope with this situation
+    instead of crashing
+    
+    * frontend/entangle-camera-manager.c: Hide controls panel
+      and disable settings menu/toolbutton if no controls are
+      available
+    * frontend/entangle-control-panel.c,
+      frontend/entangle-control-panel.h: Export a property if
+      there are any visible controls
+
+diff --git a/src/frontend/entangle-camera-manager.c b/src/frontend/entangle-camera-manager.c
+index eb49482..ee14370 100644
+--- a/src/frontend/entangle-camera-manager.c
++++ b/src/frontend/entangle-camera-manager.c
+@@ -280,32 +280,39 @@ static void do_capture_widget_sensitivity(EntangleCameraManager *manager)
+ {
+     EntangleCameraManagerPrivate *priv = manager->priv;
+     GtkWidget *toolCapture;
+-    GtkWidget *settingsScroll;
++    GtkWidget *settingsBox;
+     GtkWidget *iconScroll;
+ 
+     GtkWidget *toolNew;
+     GtkWidget *toolOpen;
++    GtkWidget *toolSettings;
+     GtkWidget *menuNew;
+     GtkWidget *menuOpen;
+     GtkWidget *menuConnect;
+     GtkWidget *menuDisconnect;
+     GtkWidget *menuHelp;
++    GtkWidget *menuSettings;
+ 
+     GtkWidget *cancel;
+     GtkWidget *operation;
+     GtkWidget *confirm;
++    gboolean hasControls;
++
++    hasControls = entangle_control_panel_get_has_controls(priv->controlPanel);
+ 
+     toolCapture = glade_xml_get_widget(priv->glade, "toolbar-capture");
+-    settingsScroll = glade_xml_get_widget(priv->glade, "settings-scroll");
++    settingsBox = glade_xml_get_widget(priv->glade, "settings-box");
+     iconScroll = glade_xml_get_widget(priv->glade, "icon-scroll");
+ 
+     toolNew = glade_xml_get_widget(priv->glade, "toolbar-new");
+     toolOpen = glade_xml_get_widget(priv->glade, "toolbar-open");
++    toolSettings = glade_xml_get_widget(priv->glade, "toolbar-settings");
+     menuNew = glade_xml_get_widget(priv->glade, "menu-new");
+     menuOpen = glade_xml_get_widget(priv->glade, "menu-open");
+     menuConnect = glade_xml_get_widget(priv->glade, "menu-connect");
+     menuDisconnect = glade_xml_get_widget(priv->glade, "menu-disconnect");
+     menuHelp = glade_xml_get_widget(priv->glade, "menu-help-camera");
++    menuSettings = glade_xml_get_widget(priv->glade, "menu-settings");
+ 
+     cancel = glade_xml_get_widget(priv->glade, "toolbar-cancel");
+     operation = glade_xml_get_widget(priv->glade, "toolbar-operation");
+@@ -360,12 +367,23 @@ static void do_capture_widget_sensitivity(EntangleCameraManager *manager)
+     if (priv->camera && !entangle_camera_get_has_preview(priv->camera))
+         gtk_widget_set_tooltip_text(priv->menuItemPreview, "This camera does not support image preview");
+ 
+-    if (priv->camera && entangle_camera_get_has_settings(priv->camera))
+-        gtk_widget_show(settingsScroll);
+-    else
+-        gtk_widget_hide(settingsScroll);
++    if (priv->camera &&
++        hasControls &&
++        entangle_camera_get_has_settings(priv->camera)) {
++        gtk_widget_show(settingsBox);
++        gtk_widget_set_sensitive(toolSettings, TRUE);
++        gtk_widget_set_sensitive(menuSettings, TRUE);
++        gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(toolSettings), TRUE);
++        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuSettings), TRUE);
++    } else {
++        gtk_widget_hide(settingsBox);
++        gtk_widget_set_sensitive(toolSettings, FALSE);
++        gtk_widget_set_sensitive(menuSettings, FALSE);
++        gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(toolSettings), FALSE);
++        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuSettings), FALSE);
++    }
+ 
+-    gtk_widget_set_sensitive(settingsScroll, !priv->task);
++    gtk_widget_set_sensitive(settingsBox, !priv->task);
+     /*gtk_widget_set_sensitive(iconScroll, !priv->task)*/
+ 
+     if (priv->task) {
+diff --git a/src/frontend/entangle-control-panel.c b/src/frontend/entangle-control-panel.c
+index bc8f09a..9d83a95 100644
+--- a/src/frontend/entangle-control-panel.c
++++ b/src/frontend/entangle-control-panel.c
+@@ -38,6 +38,8 @@
+ struct _EntangleControlPanelPrivate {
+     EntangleCamera *camera;
+     EntangleCameraScheduler *cameraScheduler;
++
++    gboolean hasControls;
+ };
+ 
+ G_DEFINE_TYPE(EntangleControlPanel, entangle_control_panel, GTK_TYPE_VBOX);
+@@ -45,6 +47,7 @@ G_DEFINE_TYPE(EntangleControlPanel, entangle_control_panel, GTK_TYPE_VBOX);
+ enum {
+     PROP_O,
+     PROP_CAMERA,
++    PROP_HAS_CONTROLS,
+ };
+ 
+ 
+@@ -138,11 +141,14 @@ static void do_setup_control_group(EntangleControlPanel *panel,
+                                    GtkVBox *box,
+                                    EntangleControlGroup *grp)
+ {
++    EntangleControlPanelPrivate *priv = panel->priv;
+     int i;
+ 
+     for (i = 0 ; i < entangle_control_group_count(grp) ; i++) {
+         EntangleControl *control = entangle_control_group_get(grp, i);
+ 
++        priv->hasControls = TRUE;
++
+         ENTANGLE_DEBUG("Build control %d %s",
+                    entangle_control_id(control),
+                    entangle_control_label(control));
+@@ -299,6 +305,9 @@ static void do_setup_camera(EntangleControlPanel *panel)
+ 
+     grp = entangle_camera_get_controls(priv->camera);
+ 
++    if (!grp)
++        return;
++
+     do_setup_control_group(panel, GTK_VBOX(panel), grp);
+     gtk_widget_show_all(GTK_WIDGET(panel));
+ }
+@@ -317,6 +326,10 @@ static void entangle_control_panel_get_property(GObject *object,
+             g_value_set_object(value, priv->camera);
+             break;
+ 
++        case PROP_HAS_CONTROLS:
++            g_value_set_boolean(value, priv->hasControls);
++            break;
++
+         default:
+             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+         }
+@@ -375,6 +388,17 @@ static void entangle_control_panel_class_init(EntangleControlPanelClass *klass)
+                                                         G_PARAM_STATIC_NICK |
+                                                         G_PARAM_STATIC_BLURB));
+ 
++    g_object_class_install_property(object_class,
++                                    PROP_CAMERA,
++                                    g_param_spec_boolean("has-controls",
++                                                         "Has Controls",
++                                                         "Has Controls",
++                                                         FALSE,
++                                                         G_PARAM_READABLE |
++                                                         G_PARAM_STATIC_NAME |
++                                                         G_PARAM_STATIC_NICK |
++                                                         G_PARAM_STATIC_BLURB));
++
+     g_type_class_add_private(klass, sizeof(EntangleControlPanelPrivate));
+ }
+ 
+@@ -435,6 +459,14 @@ EntangleCameraScheduler *entangle_control_panel_get_camera_scheduler(EntangleCon
+     return priv->cameraScheduler;
+ }
+ 
++gboolean entangle_control_panel_get_has_controls(EntangleControlPanel *panel)
++{
++    EntangleControlPanelPrivate *priv = panel->priv;
++
++    return priv->hasControls;
++}
++
++
+ /*
+  * Local variables:
+  *  c-indent-level: 4
+diff --git a/src/frontend/entangle-control-panel.h b/src/frontend/entangle-control-panel.h
+index 19ee794..f74d418 100644
+--- a/src/frontend/entangle-control-panel.h
++++ b/src/frontend/entangle-control-panel.h
+@@ -66,6 +66,7 @@ void entangle_control_panel_set_camera_scheduler(EntangleControlPanel *panel,
+                                                  EntangleCameraScheduler *sched);
+ EntangleCameraScheduler *entangle_control_panel_get_camera_scheduler(EntangleControlPanel *panel);
+ 
++gboolean entangle_control_panel_get_has_controls(EntangleControlPanel *panel);
+ 
+ G_END_DECLS
+ 
diff --git a/entangle.spec b/entangle.spec
index 4c7f039..f393cda 100644
--- a/entangle.spec
+++ b/entangle.spec
@@ -1,23 +1,21 @@
 # -*- rpm-spec -*-
 
 %define with_introspection 0
+%define with_plugins 0
 
-%if 0%{?fedora} >= 12
-%define with_introspection 1
-%endif
-%if 0%{?rhel} >= 6
+%if 0%{?fedora} >= 14
 %define with_introspection 1
+%define with_plugins 1
 %endif
 
 Summary: Tethered shooting & control of digital cameras
 Name: entangle
-Version: 0.1.0
-Release: 4%{?dist}
+Version: 0.2.0
+Release: 1%{?dist}
 License: GPLv3+
 Group: Applications/Multimedia
 Source: http://entangle-photo.org/download/sources/%{name}-%{version}.tar.gz
-Patch1: %{name}-%{version}-udev-crash.patch
-
+Patch1: %{name}-%{version}-controls-empty.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 URL: http://entangle-photo.org/
 
@@ -36,8 +34,9 @@ BuildRequires: lcms-devel >= 1.18
 BuildRequires: /usr/bin/tpage
 %if %{with_introspection}
 BuildRequires: gobject-introspection-devel
-BuildRequires: gir-repository-devel
-BuildRequires: gjs-devel
+%endif
+%if %{with_plugins}
+BuildRequires: libpeas-devel >= 0.5.5
 %endif
 BuildRequires: startup-notification-devel >= 0.5
 BuildRequires: unique-devel >= 1.0.0
@@ -59,23 +58,23 @@ and 'hands off' shooting directly from the controlling computer.
 %build
 
 %if %{with_introspection}
-%define introspection_arg --enable-introspection --with-javascript
+%define introspection_arg --enable-introspection
+%else
+%define introspection_arg --disable-introspection
+%endif
+%if %{with_plugins}
+%define plugins_arg --with-plugins
 %else
-%define introspection_arg --disable-introspection --without-javascript
+%define plugins_arg --without-plugins
 %endif
 
-%configure %{introspection_arg}
+%configure %{introspection_arg} %{plugins_arg}
 make %{?_smp_mflags}
 
 %install
 rm -fr %{buildroot}
 
 %makeinstall
-chmod -x %{buildroot}%{_datadir}/entangle/plugins/*/*.cfg
-
-rm -f %{buildroot}%{_libdir}/entangle/plugins/*.a
-rm -f %{buildroot}%{_libdir}/entangle/plugins/*.la
-
 rm -rf %{buildroot}%{_datadir}/%{name}/website
 
 %clean
@@ -110,18 +109,19 @@ update-desktop-database %{_datadir}/applications
 %{_datadir}/applications/%{name}.desktop
 %if %{with_introspection}
 %{_datadir}/gir-1.0/Entangle-0.1.gir
-%{_datadir}/gir-1.0/GPhoto-2.0.gir
 %{_libdir}/girepository-1.0/Entangle-0.1.typelib
-%{_libdir}/girepository-1.0/GPhoto-2.0.typelib
-%dir %{_libdir}/entangle
-%dir %{_libdir}/entangle/plugins
-%{_libdir}/entangle/plugins/javascript.so
+%endif
+%if %{with_plugins}
+%dir %{_libdir}/%{name}
+%dir %{_libdir}/%{name}/plugins
 %dir %{_datadir}/%{name}/plugins
-%dir %{_datadir}/%{name}/plugins/javascript
-%{_datadir}/%{name}/plugins/javascript/plugin.cfg
 %endif
 
 %changelog
+* Wed Oct  6 2010 Daniel P. Berrange <berrange at redhat.com> - 0.2.0-1
+- Update to 0.2.0 release
+- Fix crash when camera has no control widgets (rhbz #628163)
+
 * Mon Jun  7 2010 Daniel P. Berrange <berrange at redhat.com> - 0.1.0-4
 - Rebuild previous patch
 
diff --git a/sources b/sources
index 101a2fd..036f13e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-fc8c42d8c20a7f99ee7f02a2df31106d  entangle-0.1.0.tar.gz
+17a15ce8636da72d6ab9ba46429ed8d2  entangle-0.2.0.tar.gz


More information about the scm-commits mailing list