[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