[CentOS-devel] package for contrib repository

Wed Aug 5 18:38:46 UTC 2009
Karmanov Anton <defunct41 at gmail.com>

Hello,
I want to help with making CentOS a bit more comfortable, so there is
a spec of a little clipboard manager called Parcellite. Function that check
links replaced, now based on protocol prefix instead of regex
(pcre wrapper appeared in glib 2.16, but I'm not used to pcre to replace it).
Actually I make rpms really rare, so wait for your comments
(especially about dependencies).

patch text placed after spec file.
url of srpm -  http://rapidshare.com/files/264092985/parcellite-0.9.1-1.src.rpm.html
mirror - http://depositfiles.com/files/nel3gwg4p

// sorry, I used English "readonly" most of my life.

--- parcellite.spec ---
Name:           parcellite
Version:        0.9.1
Release:        1%{?dist}
Summary:        Parcellite - Lightweight GTK+ Clipboard Manager

Group:          Applications/Applets
License:        GPLv3
URL:            http://parcellite.sourceforge.net
Source0:        parcellite-%{version}.tar.gz
Patch0:         parcellite-%{version}-fix.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  gtk2-devel >= 2.10.0, glib2-devel
Requires:       gtk2, glib2

%description
Parcellite is a lightweight GTK+ clipboard manager. This is a stripped down,
basic-features-only clipboard manager with a small memory footprint for those
who like simplicity.
Project website: http://parcellite.sourceforge.net/


%prep
%setup -q
%patch -b .fix


%build
%configure
make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT


%clean
rm -rf $RPM_BUILD_ROOT


%post
update-desktop-database > /dev/null 2>&1 || :


%postun
update-desktop-database > /dev/null 2>&1 || :


%files
%defattr(-,root,root,-)
%doc COPYING
%{_sysconfdir}/xdg/autostart/parcellite-startup.desktop
%{_bindir}/parcellite
%{_datadir}/applications/parcellite.desktop
%{_datadir}/locale/de/LC_MESSAGES/parcellite.mo
%{_datadir}/locale/es/LC_MESSAGES/parcellite.mo
%{_datadir}/locale/hu/LC_MESSAGES/parcellite.mo
%{_datadir}/locale/ja/LC_MESSAGES/parcellite.mo
%{_datadir}/locale/pt_BR/LC_MESSAGES/parcellite.mo
%{_datadir}/locale/sv/LC_MESSAGES/parcellite.mo
%doc %{_mandir}/man1/parcellite.1.gz


%changelog
* Wed Aug 5 2009 Anton "d41" Karmanov <defunct41 at gmail.com>
- init, don't sure about dependencies

--- parcellite-0.9.1-fix.patch ---
diff -up ./configure.fix ./configure
--- ./configure.fix 2009-03-18 21:36:15.000000000 +0500
+++ ./configure 2009-08-05 22:59:30.000000000 +0600
@@ -10044,7 +10044,8 @@ fi
     PKG_CONFIG=no
   fi

-  min_glib_version=2.14.0
+  # d41: we don't have glib 2.14
+  min_glib_version=2.12.0
   { $as_echo "$as_me:$LINENO: checking for GLIB - version >=
$min_glib_version" >&5
 $as_echo_n "checking for GLIB - version >= $min_glib_version... " >&6; }

diff -up ./src/main.c.fix ./src/main.c
--- ./src/main.c.fix 2009-03-18 21:33:03.000000000 +0500
+++ ./src/main.c 2009-08-05 22:59:30.000000000 +0600
@@ -50,6 +50,21 @@ prefs_t prefs = {DEF_USE_COPY,        DE
                  INIT_HISTORY_KEY,    INIT_ACTIONS_KEY,     INIT_MENU_KEY,
                  DEF_NO_ICON};

+/* d41: CentOS have glib 2.12 (not 2.14)  =(
+so, thereis no g_strcmp0
+from glib docs:
+Compares str1 and str2 like strcmp(). Handles NULL gracefully by
sorting it before non-NULL strings.
+str1 : a C string or NULL
+str2 : another C string or NULL
+Returns : -1, 0 or 1, if str1 is <, == or > than str2.
+*/
+int g_strcmp0(const char *str1, const char *str2)
+{
+  if( str1 == NULL && str2 == NULL ) return 0;
+  if( str1 == NULL ) return -1;
+  if( str2 == NULL ) return 1;
+  return g_strcasecmp(str1, str2);
+};


 /* Called every CHECK_INTERVAL seconds to check for new items */
@@ -89,7 +104,10 @@ item_check(gpointer data)
             delete_duplicate(primary_text);
             append_item(primary_text);
           }
-          else
+          /* d41: add anything else only if hyperlinks_only disabled
+          to remove junk from history
+          */
+          else if (!prefs.hyperlinks_only)
           {
             delete_duplicate(primary_text);
             append_item(primary_text);
@@ -121,7 +139,10 @@ item_check(gpointer data)
           delete_duplicate(clipboard_text);
           append_item(clipboard_text);
         }
-        else
+        /* d41: add anything else only if hyperlinks_only disabled
+        to remove junk from history
+        */
+        else if (!prefs.hyperlinks_only)
         {
           delete_duplicate(clipboard_text);
           append_item(clipboard_text);
@@ -236,8 +257,12 @@ edit_selected(GtkMenuItem *menu_item, gp

     gtk_scrolled_window_set_policy((GtkScrolledWindow*)scrolled_window,
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
+
+#if GTK_CHECK_VERSION(2,14,0)
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
scrolled_window, TRUE, TRUE, 2);
+#else
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
scrolled_window, TRUE, TRUE, 2);
+#endif
     GtkWidget* text_view = gtk_text_view_new_with_buffer(clipboard_buffer);
     gtk_text_view_set_left_margin((GtkTextView*)text_view, 2);
     gtk_text_view_set_right_margin((GtkTextView*)text_view, 2);
diff -up ./src/main.h.fix ./src/main.h
--- ./src/main.h.fix 2009-03-18 21:33:03.000000000 +0500
+++ ./src/main.h 2009-08-05 22:59:30.000000000 +0600
@@ -64,6 +64,9 @@ actions_hotkey(char *keystring, gpointer
 void
 menu_hotkey(char *keystring, gpointer user_data);

+int g_strcmp0(const char *str1, const char *str2);
+
+
 G_END_DECLS

 #endif
diff -up ./src/preferences.c.fix ./src/preferences.c
--- ./src/preferences.c.fix 2009-03-18 21:33:03.000000000 +0500
+++ ./src/preferences.c 2009-08-05 22:59:30.000000000 +0600
@@ -422,7 +422,6 @@ show_preferences(gint tab)
   vbox = gtk_vbox_new(FALSE, 2);
   gtk_container_add((GtkContainer*)alignment, vbox);
   save_check = gtk_check_button_new_with_mnemonic(_("_Save history"));
-  gtk_widget_set_tooltip_text(save_check, _("Save and restore history
between sessions"));
   gtk_box_pack_start((GtkBox*)vbox, save_check, FALSE, FALSE, 0);
   hbox = gtk_hbox_new(FALSE, 4);
   gtk_box_pack_start((GtkBox*)vbox, hbox, FALSE, FALSE, 0);
diff -up ./src/utils.c.fix ./src/utils.c
--- ./src/utils.c.fix 2009-03-18 21:33:03.000000000 +0500
+++ ./src/utils.c 2009-08-05 23:50:33.000000000 +0600
@@ -50,17 +50,18 @@ check_dirs()
 }

 /* Returns TRUE if text is a hyperlink */
+/* d41: CentOS have glib 2.12 (not 2.14)  =(
+so, thereis no gregex
+*/
 gboolean
 is_hyperlink(gchar* text)
 {
-  /* TODO: I need a better regex, this one is poor */
-  GRegex* regex = g_regex_new("([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/]" \
-
"(([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}" \
-
"(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)",
-                              G_REGEX_CASELESS, 0, NULL);
-
-  gboolean result = g_regex_match(regex, text, 0, NULL);
-  g_regex_unref(regex);
+  gchar* proto[] = {
"http://","ftp://","https://","sftp://","mailto:","svn://" };
+  gboolean result = FALSE;
+  int idx, length = sizeof(proto)/sizeof(proto[0]);
+  for(idx=0; idx<length; idx++) {
+    result = result || g_str_has_prefix( text, proto[idx] );
+  }
   return result;
 }