From b10e2426545c97e5b64d7810adf323182ca005e7 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 14 May 2010 17:27:44 +0200 Subject: Bug #531912 - Mail inline parser doesn't always work --- mail/em-format-html.c | 2 +- mail/em-inline-filter.c | 81 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/mail/em-format-html.c b/mail/em-format-html.c index ad47742ba8..780b4c9581 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -1682,7 +1682,7 @@ efh_text_plain(EMFormatHTML *efh, CamelStream *stream, CamelMimePart *part, EMFo camel_object_unref(null); inline_filter = em_inline_filter_new(camel_mime_part_get_encoding(part), ct); camel_stream_filter_add(filtered_stream, (CamelMimeFilter *)inline_filter); - camel_data_wrapper_write_to_stream(dw, (CamelStream *)filtered_stream); + camel_data_wrapper_decode_to_stream (dw, (CamelStream *)filtered_stream); camel_stream_close((CamelStream *)filtered_stream); camel_object_unref(filtered_stream); diff --git a/mail/em-inline-filter.c b/mail/em-inline-filter.c index 1959b0b7f8..43dee1f97e 100644 --- a/mail/em-inline-filter.c +++ b/mail/em-inline-filter.c @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include "em-utils.h" #include "em-format/em-format.h" @@ -140,11 +142,26 @@ emif_add_part(EMInlineFilter *emif, const gchar *data, gint len) if (emif->data->len <= 0) { return; } - mem = camel_stream_mem_new_with_byte_array(emif->data); + + mem = camel_stream_mem_new_with_byte_array (emif->data); emif->data = g_byte_array_new(); dw = camel_data_wrapper_new(); - camel_data_wrapper_construct_from_stream(dw, mem); + if (encoding == emif->base_encoding && (encoding == CAMEL_TRANSFER_ENCODING_BASE64 || encoding == CAMEL_TRANSFER_ENCODING_QUOTEDPRINTABLE)) { + CamelMimeFilterBasic *enc_filter = camel_mime_filter_basic_new_type (encoding == CAMEL_TRANSFER_ENCODING_BASE64 ? CAMEL_MIME_FILTER_BASIC_BASE64_ENC : CAMEL_MIME_FILTER_BASIC_QP_ENC); + CamelStreamFilter *filter_stream; + + filter_stream = camel_stream_filter_new_with_stream (mem); + camel_stream_filter_add (filter_stream, CAMEL_MIME_FILTER (enc_filter)); + + /* properly encode content */ + camel_data_wrapper_construct_from_stream (dw, CAMEL_STREAM (filter_stream)); + + camel_object_unref (enc_filter); + camel_object_unref (filter_stream); + } else { + camel_data_wrapper_construct_from_stream (dw, mem); + } camel_object_unref(mem); if (emif_types[emif->state].plain && emif->base_type) { @@ -199,12 +216,14 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) gchar *start; while (inptr < inend) { + gint rest_len; + start = inptr; while (inptr < inend && *inptr != '\n') inptr++; - if (inptr == inend) { + if (inptr == inend && start == inptr) { if (!final) { camel_mime_filter_backup(f, start, inend-start); inend = start; @@ -212,22 +231,26 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) break; } - *inptr++ = 0; + rest_len = inend - start; + if (inptr < inend) + *inptr++ = 0; + + #define restore_inptr() G_STMT_START { if (inptr < inend) inptr[-1] = '\n'; } G_STMT_END switch (emif->state) { case EMIF_PLAIN: - /* This could use some funky plugin shit, but this'll do for now */ - if (strncmp(start, "begin ", 6) == 0 + /* This could use some funky plugin, but this'll do for now */ + if (rest_len > 6 && strncmp (start, "begin ", 6) == 0 && start[6] >= '0' && start[6] <= '7') { gint i = 7; gchar *name; - while (start[i] >='0' && start[i] <='7') + while (i < rest_len && start[i] >='0' && start[i] <='7') i++; - inptr[-1] = '\n'; + restore_inptr (); - if (start[i++] != ' ') + if (i >= rest_len || start[i++] != ' ') break; emif_add_part(emif, data_start, start-data_start); @@ -237,23 +260,23 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) g_free(name); data_start = start; emif->state = EMIF_UUENC; - } else if (strncmp(start, "(This file must be converted with BinHex 4.0)", 45) == 0) { - inptr[-1] = '\n'; + } else if (rest_len >= 45 && strncmp (start, "(This file must be converted with BinHex 4.0)", 45) == 0) { + restore_inptr (); emif_add_part(emif, data_start, start-data_start); data_start = start; emif->state = EMIF_BINHEX; - } else if (strncmp(start, "%!PS-Adobe-", 11) == 0) { - inptr[-1] = '\n'; + } else if (rest_len >= 11 && strncmp (start, "%!PS-Adobe-", 11) == 0) { + restore_inptr (); emif_add_part(emif, data_start, start-data_start); data_start = start; emif->state = EMIF_POSTSCRIPT; - } else if (strncmp(start, "-----BEGIN PGP SIGNED MESSAGE-----", 34) == 0) { - inptr[-1] = '\n'; + } else if (rest_len >= 34 && strncmp (start, "-----BEGIN PGP SIGNED MESSAGE-----", 34) == 0) { + restore_inptr (); emif_add_part(emif, data_start, start-data_start); data_start = start; emif->state = EMIF_PGPSIGNED; - } else if (strncmp(start, "-----BEGIN PGP MESSAGE-----", 27) == 0) { - inptr[-1] = '\n'; + } else if (rest_len >= 27 && strncmp (start, "-----BEGIN PGP MESSAGE-----", 27) == 0) { + restore_inptr (); emif_add_part(emif, data_start, start-data_start); data_start = start; emif->state = EMIF_PGPENCRYPTED; @@ -261,8 +284,8 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) break; case EMIF_UUENC: - if (strcmp(start, "end") == 0) { - inptr[-1] = '\n'; + if (rest_len >= 3 && strncmp (start, "end", 3) == 0) { + restore_inptr (); emif_add_part(emif, data_start, inptr-data_start); data_start = inptr; emif->state = EMIF_PLAIN; @@ -278,7 +301,7 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) linelen /= 4; linelen *= 3; if (!(len == linelen || len == linelen-1 || len == linelen-2)) { - inptr[-1] = '\n'; + restore_inptr (); emif_add_part(emif, data_start, start-data_start); data_start = start; inptr = start; @@ -289,31 +312,31 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) break; case EMIF_BINHEX: if (inptr > (start+1) && inptr[-2] == ':') { - inptr[-1] = '\n'; + restore_inptr (); emif_add_part(emif, data_start, inptr-data_start); data_start = inptr; emif->state = EMIF_PLAIN; } break; case EMIF_POSTSCRIPT: - if (strcmp(start, "%%EOF") == 0) { - inptr[-1] = '\n'; + if (rest_len >= 5 && strncmp (start, "%%EOF", 5) == 0) { + restore_inptr (); emif_add_part(emif, data_start, inptr-data_start); data_start = inptr; emif->state = EMIF_PLAIN; } break; case EMIF_PGPSIGNED: - if (strcmp(start, "-----END PGP SIGNATURE-----") == 0) { - inptr[-1] = '\n'; + if (rest_len >= 27 && strncmp (start, "-----END PGP SIGNATURE-----", 27) == 0) { + restore_inptr (); emif_add_part(emif, data_start, inptr-data_start); data_start = inptr; emif->state = EMIF_PLAIN; } break; case EMIF_PGPENCRYPTED: - if (strcmp(start, "-----END PGP MESSAGE-----") == 0) { - inptr[-1] = '\n'; + if (rest_len >= 25 && strncmp (start, "-----END PGP MESSAGE-----", 25) == 0) { + restore_inptr (); emif_add_part(emif, data_start, inptr-data_start); data_start = inptr; emif->state = EMIF_PLAIN; @@ -321,7 +344,9 @@ emif_scan(CamelMimeFilter *f, gchar *in, gsize len, gint final) break; } - inptr[-1] = '\n'; + restore_inptr (); + + #undef restore_inptr } if (final) { -- cgit v1.2.3 From 04e59ab76738bc618319b3faca54541a46edcc97 Mon Sep 17 00:00:00 2001 From: Ivar Smolin Date: Sat, 15 May 2010 12:44:20 +0300 Subject: Estonian translation updated --- po/et.po | 178 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 78 insertions(+), 100 deletions(-) diff --git a/po/et.po b/po/et.po index 755b63ecf1..4aa740385f 100644 --- a/po/et.po +++ b/po/et.po @@ -2,12 +2,12 @@ # Estonian translation of Evolution. # # Copyright (C) 2001-2006 Free Software Foundation, Inc. -# Copyright (C) 2007-2009 The GNOME Project. +# Copyright (C) 2007-2010 The GNOME Project. # This file is distributed under the same license as the evolution package. # # Ilmar Kerm , 2001. # Marek Sepp , 2001, 2002. -# Ivar Smolin , 2002, 2003, 2005-2009. +# Ivar Smolin , 2002, 2003, 2005-2010. # Kaarel Jõgi , 2002. # Priit Laes , 2003-2007, 2009, 2010. # Mattias Põldaru , 2009-2010. @@ -18,8 +18,8 @@ msgstr "" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=evolution\n" "POT-Creation-Date: 2010-03-24 13:21+0000\n" -"PO-Revision-Date: 2010-03-08 22:04+0300\n" -"Last-Translator: Priit Laes \n" +"PO-Revision-Date: 2010-05-15 10:33+0300\n" +"Last-Translator: Ivar Smolin \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4278,7 +4278,7 @@ msgid "%d %b %Y" msgstr "%d. %B %Y" msgid "Jump button" -msgstr "" +msgstr "Liikumise nupp" msgid "Click here, you can find more events." msgstr "Täiendavate sündmuste leidmiseks klõpsa siia." @@ -5982,10 +5982,9 @@ msgstr "Klõpsa siia, et valida kaustad kuhu postitada" msgid "Undo the last action" msgstr "Viimase tegevuse tagasivõtmine" -#, fuzzy #| msgid "Send Latest Information" msgid "Redo the last undone action" -msgstr "Värskemate andmete saatmine" +msgstr "Viimase tagasivõetud tegevuse uuesti sooritamine" msgid "Search for text" msgstr "Tekstiotsing" @@ -6121,85 +6120,73 @@ msgid "_Save Draft" msgstr "_Salvesta mustand" msgid "Run Anjal in a window" -msgstr "" +msgstr "Anjali jooksutamine aknas" -#, fuzzy #| msgid "Mark as _default memo list" msgid "Make Anjal the default email client" -msgstr "Märgitud _vaikimisi märkmeloendiks" +msgstr "Anjali määramine vaikimisi meilikliendiks" #. TRANSLATORS: don't translate the terms in brackets msgid "ID of the socket to embed in" -msgstr "" +msgstr "Pesa ID, millesse kaasatakse" -#, fuzzy #| msgid "sort" msgid "socket" -msgstr "sordi" +msgstr "pesa" -#, fuzzy #| msgid "Default Mail Client" msgid "Anjal email client" -msgstr "Vaikimisi postiklient" +msgstr "Anjal meiliklient" #, fuzzy #| msgid "New _Task" msgid "New Tab" msgstr "Uus ü_lesanne" -#, fuzzy #| msgid "Please choose another name." msgid "Please enter your full name." -msgstr "Palun vali mõni teine nimi." +msgstr "Palun sisesta enda täisnimi." -#, fuzzy #| msgid "Using email address" msgid "Please enter your email address." -msgstr "Meiliaadressi kasutamine" +msgstr "Palun sisesta enda meiliaadress." msgid "The email address you have entered is invalid." -msgstr "" +msgstr "Sisestatud meiliaadress ei ole korrektne." msgid "Personal details:" msgstr "" -#, fuzzy #| msgid "_Name:" msgid "Name:" -msgstr "_Nimi:" +msgstr "Nimi:" -#, fuzzy #| msgid "Email _Address:" msgid "Email address:" -msgstr "E-posti _aadress:" +msgstr "E-posti aadress:" msgid "Receiving details:" msgstr "" -#, fuzzy #| msgid "Server _Type:" msgid "Server type:" -msgstr "Serveri l_iik:" +msgstr "Serveri liik:" -#, fuzzy #| msgid "Server Message:" msgid "Server address:" -msgstr "Serveri teade:" +msgstr "Serveri aadress:" -#, fuzzy #| msgid "Us_ername:" msgid "Username:" -msgstr "_Kasutajanimi:" +msgstr "Kasutajanimi:" -#, fuzzy #| msgid "No encryption" msgid "Use encryption:" -msgstr "Krüptimine puudub" +msgstr "Kasutatav krüptimine:" -#, fuzzy #| msgid "Never" msgid "never" -msgstr "Mitte kunagi" +msgstr "mitte kunagi" msgid "Sending details:" msgstr "" @@ -6209,66 +6196,71 @@ msgid "" "address and password in below and we'll try and work out all the settings. " "If we can't do it automatically you'll need your server details as well." msgstr "" +"Meilirakenduse kasutamiseks tuleb seadistada konto. Sisesta allapoole oma " +"meiliaadress ja konto ning püüame kõik sätted määrata. Kui seda pole " +"võimalik automaatselt teha, tuleb sisestada ka serveri andmed." msgid "" "Sorry, we can't work out the settings to get your mail automatically. Please " "enter them below. We've tried to make a start with the details you just " "entered but you may need to change them." msgstr "" +"Kahjuks me ei suutnud meilisätteid automaatselt tuvastada. Palun sisesta " +"need allapoole. Püüdsime alustada sätetega, mille sa just sisestasid, aga " +"võimalik, et neid tuleb muuta." msgid "You can specify more options to configure the account." -msgstr "" +msgstr "Võid konto seadistamiseks sisestada rohkem sätteid." msgid "" "Now we need your settings for sending mail. We've tried to make some guesses " "but you should check them over to make sure." msgstr "" +"Nüüd on vajalikud meilisaatmise sätted. Püüdsime need ära arvata, aga " +"kindluse mõttes tuleks need üle kontrollida." msgid "You can specify your default settings for your account." -msgstr "" +msgstr "Võid määrata oma konto vaikimisi sätted." msgid "" "Time to check things over before we try and connect to the server and fetch " "your mail." msgstr "" +"Sobilik aeg kontrollida sätted üle enne, kui ühendume serveriga ja tõmbame " +"kirjad alla." msgid "Identity" msgstr "Identiteet" -#, fuzzy #| msgid "Receiving Email" msgid "Next - Receiving mail" -msgstr "E-posti vastuvõtmine" +msgstr "Edasi - e-posti vastuvõtmine" #, fuzzy #| msgid "Receiving Email" msgid "Receiving mail" msgstr "E-posti vastuvõtmine" -#, fuzzy #| msgid "Sending Email" msgid "Next - Sending mail" -msgstr "Kirjade saatmine" +msgstr "Edasi - kirjade saatmine" -#, fuzzy #| msgid "Identity" msgid "Back - Identity" -msgstr "Identiteet" +msgstr "Tagasi - identiteet" -#, fuzzy #| msgid "Receiving Options" msgid "Next - Receiving options" -msgstr "Vastuvõtmise valikud" +msgstr "Edasi - vastuvõtmise valikud" #, fuzzy #| msgid "Receiving Options" msgid "Receiving options" msgstr "Vastuvõtmise valikud" -#, fuzzy #| msgid "Receiving Email" msgid "Back - Receiving mail" -msgstr "E-posti vastuvõtmine" +msgstr "Tagasi - e-posti vastuvõtmine" #, fuzzy #| msgid "Sending Email" @@ -6276,63 +6268,54 @@ msgid "Sending mail" msgstr "Kirjade saatmine" msgid "Next - Review account" -msgstr "" +msgstr "Edasi - konto ülevaatamine" -#, fuzzy #| msgid "Defaults" msgid "Next - Defaults" -msgstr "Vaikimisi" +msgstr "Edasi - vaikimisi" -#, fuzzy #| msgid "Receiving Options" msgid "Back - Receiving options" -msgstr "Vastuvõtmise valikud" +msgstr "Tagasi - vastuvõtmise valikud" msgid "Defaults" msgstr "Vaikimisi" -#, fuzzy #| msgid "Sending Email" msgid "Back - Sending mail" -msgstr "Kirjade saatmine" +msgstr "Tagasi - kirjade saatmine" -#, fuzzy #| msgid "List of accounts" msgid "Review account" -msgstr "Kontode nimekiri" +msgstr "Konto ülevaatus" msgid "Finish" -msgstr "" +msgstr "Lõpeta" -#, fuzzy #| msgid "Ascending" msgid "Back - Sending" -msgstr "Kasvavas järjestuses" +msgstr "Tagasi - saatmine" -#, fuzzy #| msgid "_Close" msgid "Close Tab" -msgstr "Sul_ge" +msgstr "Saki sulgemine" -#, fuzzy #| msgid "Account Editor" msgid "Account Wizard" -msgstr "Kontoredaktor" +msgstr "Konto nõustaja" #, fuzzy #| msgid "Evolution Account Assistant" msgid "Evolution account assistant" msgstr "Evolutioni kontoabiline" -#, fuzzy #| msgid "Junk Mail Settings" msgid "Email Settings" -msgstr "Rämpsposti sätted" +msgstr "E-posti sätted" -#, fuzzy #| msgid "Quoted" msgid "Quit" -msgstr "Tsitaadina" +msgstr "Lõpeta" #. create the local source group msgid "On This Computer" @@ -6341,18 +6324,16 @@ msgstr "Kohalikus arvutis" msgid "Modify" msgstr "Muuda" -#, fuzzy #| msgid "Add a Column" msgid "Add a new account" -msgstr "Tulba lisamine" +msgstr "Uue konto lisamine" msgid "Account management" msgstr "" -#, fuzzy #| msgid "Junk Settings" msgid "Settings" -msgstr "Rämpsposti sätted" +msgstr "Sätted" msgid "Calendar event notifications" msgstr "Kalendrisündmuste märguanded" @@ -6373,10 +6354,9 @@ msgstr "Grupitöövahend" msgid "Manage your email, contacts and schedule" msgstr "Oma e-posti, kontaktide ja kalendri haldamine" -#, fuzzy #| msgid "Configuration" msgid "Configure email accounts" -msgstr "Seadistused" +msgstr "E-posti kontode seadistused" msgid "address card" msgstr "aadressikaart" @@ -6773,7 +6753,7 @@ msgid "R_ule name:" msgstr "_Reegli nimi:" msgid "Find items that meet the following conditions" -msgstr "Järgnevatele tingimustele vastavate kirjete leidmine" +msgstr "Kui leitakse järgnevatele tingimustele vastav kirje" msgid "A_dd Condition" msgstr "Lisa _tingimus" @@ -6785,7 +6765,7 @@ msgid "If any conditions are met" msgstr "Kui vähemalt üks tingimustest on täidetud" msgid "_Find items:" -msgstr "_Kirjeid otsitakse:" +msgstr "_Kirjed sobivad:" msgid "All related" msgstr "Kõik seonduvad" @@ -6812,7 +6792,7 @@ msgid "Add Rule" msgstr "Reegli lisamine" msgid "Edit Rule" -msgstr "Muuda reeglit" +msgstr "Reegli muutmine" msgid "Bad regular expression "{0}"." msgstr "Vigane regulaaravaldis "{0}"." @@ -7647,13 +7627,13 @@ msgstr "Evolutioni kontoabiline" #. Translators: First %s is an email address, second %s is the subject of the email, third %s is the date #, c-format msgid "Your message to %s about \"%s\" on %s has been read." -msgstr "" +msgstr "Sinu sõnumit vastuvõtjale %s teemal \"%s\" loeti %s." #. Translators: %s is the subject of the email message -#, fuzzy, c-format +#, c-format #| msgid "Mail Notification Properties" msgid "Delivery Notification for: \"%s\"" -msgstr "Sõnumiteavituse omadused" +msgstr "Sõnumiteavitus kirjale \"%s\"" msgid "an unknown sender" msgstr "tundmatu saatja" @@ -7856,7 +7836,7 @@ msgstr "Määramata olek" #. and now for the action area msgid "Then" -msgstr "Siis" +msgstr "siis" msgid "Add Ac_tion" msgstr "Lisa _tegevus" @@ -8169,9 +8149,9 @@ msgid "Message Filters" msgstr "Sõnumifiltrid" #. Drop filename for messages from a mailbox -#, fuzzy, c-format +#, c-format msgid "Messages from %s" -msgstr "Sõnumid aadressilt %s" +msgstr "Sõnumid postkastist %s" msgid "Search _Folders" msgstr "_Otsingukaustad" @@ -9551,13 +9531,13 @@ msgid "_Use the same fonts as other applications" msgstr "_Kirjatüüp on sama, mis teistes rakendustes" msgid "a" -msgstr "" +msgstr "a" msgid "addresses" msgstr "aadressid" msgid "b" -msgstr "" +msgstr "b" msgid "color" msgstr "värvusega" @@ -10276,7 +10256,7 @@ msgstr "" "{0}" msgid "The script file must exist and be executable." -msgstr "Skriptifail peab eksisteerima ja olema käivitatav." +msgstr "Skriptifail peab olemas olema ja samuti olema käivitatav." msgid "" "This folder may have been added implicitly,\n" @@ -12165,8 +12145,8 @@ msgstr "Evolutioni kontode ja seadistuste varundamine" msgid "Backing Evolution data (Mails, Contacts, Calendar, Tasks, Memos)" msgstr "" -"Evolutioni andmete (e-post, kontaktid, kalender, ülesanded, märkmed) " -"varundamine" +"Evolutioni andmete varundamine (e-post, kontaktid, kalender, ülesanded, " +"märkmed)" msgid "Backup complete" msgstr "Varundamine on valmis" @@ -12178,7 +12158,7 @@ msgid "Backup current Evolution data" msgstr "Praeguste Evolutioni andmete varundamine" msgid "Extracting files from backup" -msgstr "Varukoopiast failide väljavõtmine" +msgstr "Failide lahtipakkimine varukoopiast" msgid "Loading Evolution settings" msgstr "Evolutioni sätete laadimine" @@ -13015,7 +12995,7 @@ msgid "Reminder Notes" msgstr "Meeldetuletaja märkmed" msgid "Subscribe to my _alarms" -msgstr "Minu _häirete tellimine" +msgstr "Minu _alarmide tellimine" msgid "Subscribe to my _notifications" msgstr "Minu _märguannete tellimine" @@ -14192,7 +14172,7 @@ msgstr "" "nõutud." msgid "Show s_uppressed HTML parts as attachments" -msgstr "Mittekuvatud HTML-i näidatakse manusena" +msgstr "Mittek_uvatud HTML-i näidatakse manusena" msgid "HTML _Mode" msgstr "_HTML-režiim" @@ -14634,17 +14614,16 @@ msgstr "Akna vaikimisi olek" msgid "Default window width" msgstr "Akna vaikimisi laius" -#, fuzzy #| msgid "Enable search folders" msgid "Enable express mode" -msgstr "Otsingukaustade lubamine" +msgstr "Ekspressrežiimi lubamine" msgid "" "Enables the proxy settings when accessing HTTP/Secure HTTP over the Internet." msgstr "Proksi sätete lubamine HTTP ja HTTPS protokollidele." msgid "Flag that enables a much simplified user interface." -msgstr "" +msgstr "Lipp, mis määrab oluliselt lihtsustatud kasutajaliidese kasutamise." msgid "HTTP proxy host name" msgstr "HTTP-proksi hostinimi" @@ -14973,10 +14952,10 @@ msgid "translator-credits" msgstr "" "Ilmar Kerm , 2001.\n" "Marek Sepp , 2001, 2002.\n" -"Ivar Smolin , 2002, 2003, 2005-2009.\n" +"Ivar Smolin , 2002, 2003, 2005–2010.\n" "Kaarel Jõgi , 2002.\n" -"Priit Laes , 2003-2007, 2009, 2010.\n" -"Mattias Põldaru , 2009-2010." +"Priit Laes , 2003–2007, 2009, 2010.\n" +"Mattias Põldaru , 2009–2010." msgid "Evolution Website" msgstr "Evolutioni veebisait" @@ -15085,7 +15064,7 @@ msgid "Submit a bug report using Bug Buddy" msgstr "Veateate saatmine Bug Buddy abil" msgid "GNOME Pilot _Synchronization..." -msgstr "GNOME Pilot-iga sünkroniseerimine..." +msgstr "GNOME Pilot-iga _sünkroniseerimine..." msgid "Set up GNOME Pilot configuration" msgstr "GNOME Piloti sätete määramine" @@ -15335,10 +15314,9 @@ msgstr "Antud geomeetria rakendamine peaaknale" msgid "Start in online mode" msgstr "Alustamine võrgurežiimis" -#, fuzzy #| msgid "Start in online mode" msgid "Start in \"express\" mode" -msgstr "Alustamine võrgurežiimis" +msgstr "Alustamine ekspressrežiimis" msgid "Forcibly shut down Evolution" msgstr "Evolutioni sundimine töö lõpetamisele" @@ -16498,7 +16476,7 @@ msgid "_Until:" msgstr "_Kuni:" msgid "_When convenient" -msgstr "_Kui sobiv" +msgstr "_Kui sobib" msgid "_When opened:" msgstr "Kui _avatakse:" @@ -16519,7 +16497,7 @@ msgid "Add Signature Script" msgstr "Allkirjaskripti lisamine" msgid "Edit Signature Script" -msgstr "Allkirja muutmine" +msgstr "Allkirjaskripti muutmine" msgid "Add _Script" msgstr "Lisa _skript" -- cgit v1.2.3 From ba5a33b6f19d2cdb747757408b08c5ae4ade3d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Mon, 17 May 2010 09:07:50 +0200 Subject: [win32] Don't call glib functions before g_thread_init was called and register evolution as capable to handle mailto: protocol on startup --- shell/main.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/shell/main.c b/shell/main.c index 3ab0e9a709..b3fdc7ad55 100644 --- a/shell/main.c +++ b/shell/main.c @@ -60,6 +60,9 @@ #include "e-util/e-profile-event.h" #include "e-util/e-util-private.h" #include "e-util/e-util.h" +#ifdef G_OS_WIN32 +#include "e-util/e-win32-defaults.h" +#endif #include #include @@ -453,13 +456,6 @@ main (gint argc, gchar **argv) dup2 (fileno (stderr), 2); } } - - path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); - - if (!g_setenv ("PATH", path, TRUE)) - g_warning ("Could not set PATH for Evolution and its child processes"); - - g_free (path); #endif /* Make ElectricFence work. */ @@ -485,6 +481,15 @@ main (gint argc, gchar **argv) dbus_g_thread_init (); #ifdef G_OS_WIN32 + path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); + + if (!g_setenv ("PATH", path, TRUE)) + g_warning ("Could not set PATH for Evolution and its child processes"); + + g_free (path); + + _e_win32_register_mailer (); + if (strcmp (gettext (""), "") == 0) { /* No message catalog installed for the current locale * language, so don't bother with the localisations -- cgit v1.2.3 From bcfb28ff6784143ab8472023e7471d9203da714e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Mon, 17 May 2010 09:09:28 +0200 Subject: [win32] Make Evolution actually appear in "Set Program Access and Defaults" dialogue and use quoted string instead of short path, since this is how the "Hotmail" e-mail provider is doing it (unlike what documentation says) --- e-util/e-win32-defaults.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/e-util/e-win32-defaults.c b/e-util/e-win32-defaults.c index 3d919a017d..eca924936e 100644 --- a/e-util/e-win32-defaults.c +++ b/e-util/e-win32-defaults.c @@ -104,8 +104,6 @@ _e_win32_register_mailer_impl (WINBOOL system) DWORD i, dwDisposition; gchar *defaultIcon = NULL; gchar *dllPath = NULL; - gchar *dllShortPath = NULL; - DWORD dllShortPathLength; gchar *evolutionBinary = NULL; gchar *openCommand = NULL; gchar *setDefaultCommand = NULL; @@ -166,28 +164,24 @@ _e_win32_register_mailer_impl (WINBOOL system) return; dllPath = _e_win32_sanitize_path (g_build_path(G_DIR_SEPARATOR_S, _e_get_bindir (), EUTILDLL, NULL)); - dllShortPathLength = GetShortPathNameA (dllPath, NULL, 0); - dllShortPath = g_new0 (char, dllShortPathLength); - GetShortPathNameA (dllPath, dllShortPath, dllShortPathLength); - g_free (dllPath); - setDefaultCommand = g_strconcat ("rundll32 ", dllShortPath, ",_e_win32_set_default_mailer", NULL); - unsetDefaultCommand = g_strconcat ("rundll32 ", dllShortPath, ",_e_win32_set_default_mailer", NULL); - g_free (dllShortPath); + setDefaultCommand = g_strconcat ("%SystemRoot%\\system32\\rundll32.exe \"", dllPath, "\",_e_win32_set_default_mailer", NULL); + unsetDefaultCommand = g_strconcat ("%SystemRoot%\\system32\\rundll32.exe \"", dllPath, "\",_e_win32_unset_default_mailer", NULL); + g_free (dllPath); - if ((returnValue = RegSetValueExA (reg_subkey, "ReinstallCommand", 0, REG_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { + if ((returnValue = RegSetValueExA (reg_subkey, "ReinstallCommand", 0, REG_EXPAND_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { g_free (setDefaultCommand); g_free (unsetDefaultCommand); return; } - if ((returnValue = RegSetValueExA (reg_subkey, "ShowIconsCommand", 0, REG_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { + if ((returnValue = RegSetValueExA (reg_subkey, "ShowIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { g_free (setDefaultCommand); g_free (unsetDefaultCommand); return; } - if ((returnValue = RegSetValueExA (reg_subkey, "HideIconsCommand", 0, REG_SZ, (const BYTE *)unsetDefaultCommand, strlen (unsetDefaultCommand) + 1))) { + if ((returnValue = RegSetValueExA (reg_subkey, "HideIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)unsetDefaultCommand, strlen (unsetDefaultCommand) + 1))) { g_free (setDefaultCommand); g_free (unsetDefaultCommand); return; -- cgit v1.2.3 From 9bd14384a3fe538d7a7013d71b370ac8f044c573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Mon, 17 May 2010 09:42:10 +0200 Subject: Ouch, fix a typo! --- e-util/e-win32-defaults.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e-util/e-win32-defaults.c b/e-util/e-win32-defaults.c index eca924936e..99b19d1818 100644 --- a/e-util/e-win32-defaults.c +++ b/e-util/e-win32-defaults.c @@ -148,7 +148,7 @@ _e_win32_register_mailer_impl (WINBOOL system) return; evolutionBinary = _e_win32_sanitize_path (g_build_path (G_DIR_SEPARATOR_S, _e_get_bindir (), EVOBINARY, NULL)); - openCommand = g_strconcat("\"", evolutionBinary, "\" -component=mail", NULL); + openCommand = g_strconcat("\"", evolutionBinary, "\" --component=mail", NULL); g_free (evolutionBinary); if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)openCommand, strlen (openCommand) + 1))) { g_free (openCommand); -- cgit v1.2.3 From 8059a6ad3a150f93c950f1027bd3936a66ac73b9 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 17 May 2010 15:42:11 -0400 Subject: Bug 617865 - Various data file cleanups - Install evolution-alarm-notify in $(privlibexecdir) instead of $(bindir). - Set the X-GNOME-Bugzilla-Version in evolution-alarm-notify.desktop to @BASE_VERSION@.x (patch was missing the .x suffix). - Killed data/evolution.keys.in.in since it's full of CORBA cruft. The MimeType field in evolution.desktop fills this role now. - Copied the AS_AC_EXPAND macro from gnome-settings-daemon. The macro sets up path-related substitutions for use in automake input files. So for example AS_AC_EXPAND(PRIVLIBEXECDIR, "$privlibexecdir") in configure.ac allows us to use @PRIVLIBEXECDIR@ in .desktop.in files. - Simplified .desktop rules using gnome-settings-daemon as a guide. --- calendar/gui/alarm-notify/Makefile.am | 2 +- configure.ac | 6 ++++ data/Makefile.am | 24 ++++----------- data/evolution-alarm-notify.desktop.in.in | 4 +-- data/evolution.keys.in.in | 24 --------------- m4/as-ac-expand.m4 | 50 +++++++++++++++++++++++++++++++ po/POTFILES.in | 1 - po/POTFILES.skip | 3 ++ 8 files changed, 67 insertions(+), 47 deletions(-) delete mode 100644 data/evolution.keys.in.in create mode 100644 m4/as-ac-expand.m4 diff --git a/calendar/gui/alarm-notify/Makefile.am b/calendar/gui/alarm-notify/Makefile.am index 9f757e3909..32190bba12 100644 --- a/calendar/gui/alarm-notify/Makefile.am +++ b/calendar/gui/alarm-notify/Makefile.am @@ -1,4 +1,4 @@ -bin_PROGRAMS = evolution-alarm-notify +privlibexec_PROGRAMS = evolution-alarm-notify if HAVE_WINDRES EVOLUTIONALARMNOTIFYICON = evolution-alarm-notify-icon.o diff --git a/configure.ac b/configure.ac index 052f303624..ba30c04103 100644 --- a/configure.ac +++ b/configure.ac @@ -1382,6 +1382,9 @@ AC_SUBST(viewsdir) privconduitdir="$privlibdir/conduits" AC_SUBST(privconduitdir) +dnl For evolution-alarm-notify.desktop +AS_AC_EXPAND(PRIVLIBEXECDIR, "$privlibexecdir") + dnl ************************ dnl Plugins dnl ************************ @@ -1646,6 +1649,9 @@ addressbook/tools/csv2vcard addressbook/util/Makefile art/Makefile data/Makefile +data/evolution.desktop.in +data/evolution-alarm-notify.desktop.in +data/evolution-settings.desktop.in data/icons/Makefile doc/Makefile doc/reference/Makefile diff --git a/data/Makefile.am b/data/Makefile.am index 9dcfd7b94b..b02037b37c 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,27 +1,15 @@ SUBDIRS = icons desktopdir = $(datadir)/applications -desktop_in_in_file = evolution.desktop.in.in \ - evolution-settings.desktop.in.in -desktop_DATA = $(desktop_in_in_file:.desktop.in.in=.desktop) -%.desktop.in: %.desktop.in.in - sed -e "s|\@BASE_VERSION\@|$(BASE_VERSION)|" -e "s|\@DATASERVER_EXEC_VERSION\@|$(DATASERVER_EXEC_VERSION)|" $< > $@ +desktop_in_files = evolution.desktop.in evolution-settings.desktop.in +desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) autostartdir = $(sysconfdir)/xdg/autostart -autostart_in_in_files = evolution-alarm-notify.desktop.in.in autostart_in_files = evolution-alarm-notify.desktop.in autostart_DATA = $(autostart_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ -keysdir = $(datadir)/mime-info -keys_in_file = evolution.keys.in.in -keys_DATA = $(keys_in_file:.keys.in.in=.keys) -%.keys.in: %.keys.in.in - sed -e "s|\@BASE_VERSION\@|$(BASE_VERSION)|" $< > $@ - -@INTLTOOL_KEYS_RULE@ - mimedir = $(datadir)/mime-info dist_mime_DATA = evolution.mime @@ -37,12 +25,10 @@ dist_noinst_MANS = evolution.1 CLEANFILES = \ $(autostart_DATA) \ - $(desktop_DATA) \ - $(keys_DATA) + $(desktop_DATA) EXTRA_DIST = \ - $(autostart_in_in_files) \ - $(desktop_in_in_file) \ - $(keys_in_file) + $(autostart_in_files) \ + $(desktop_in_files) -include $(top_srcdir)/git.mk diff --git a/data/evolution-alarm-notify.desktop.in.in b/data/evolution-alarm-notify.desktop.in.in index 23b40644fa..ba15661d3e 100644 --- a/data/evolution-alarm-notify.desktop.in.in +++ b/data/evolution-alarm-notify.desktop.in.in @@ -3,7 +3,7 @@ Type=Application _Name=Evolution Alarm Notify _Comment=Calendar event notifications Icon=appointment-soon -Exec=evolution-alarm-notify +Exec=@PRIVLIBEXECDIR@/evolution-alarm-notify Terminal=false Type=Application Categories= @@ -11,4 +11,4 @@ OnlyShowIn=GNOME;XFCE; X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=evolution X-GNOME-Bugzilla-Component=calendar -X-GNOME-Bugzilla-Version=@VERSION@ +X-GNOME-Bugzilla-Version=@BASE_VERSION@.x diff --git a/data/evolution.keys.in.in b/data/evolution.keys.in.in deleted file mode 100644 index 6baf605235..0000000000 --- a/data/evolution.keys.in.in +++ /dev/null @@ -1,24 +0,0 @@ -text/x-vcard - _description=address card - default_action_type=component - default_component_iid=OAFIID:GNOME_Evolution_Addressbook_VCard_Control:@BASE_VERSION@ - short_list_component_iids_for_novice_user_level=OAFIID:GNOME_Evolution_Addressbook_VCard_Control:@BASE_VERSION@ - short_list_component_iids_for_intermediate_user_level=OAFIID:GNOME_Evolution_Addressbook_VCard_Control:@BASE_VERSION@ - short_list_component_iids_for_hacker_user_level=OAFIID:GNOME_Evolution_Addressbook_VCard_Control:@BASE_VERSION@ - -text/x-calendar - _description=calendar information - default_action_type=component - default_component_iid=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_novice_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_intermediate_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_hacker_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - -text/calendar - _description=calendar information - default_action_type=component - default_component_iid=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_novice_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_intermediate_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - short_list_component_iids_for_hacker_user_level=OAFIID:GNOME_Evolution_Calendar_iTip_Control:@BASE_VERSION@ - diff --git a/m4/as-ac-expand.m4 b/m4/as-ac-expand.m4 new file mode 100644 index 0000000000..8bd95a85cc --- /dev/null +++ b/m4/as-ac-expand.m4 @@ -0,0 +1,50 @@ +dnl as-ac-expand.m4 0.2.0 -*- autoconf -*- +dnl autostars m4 macro for expanding directories using configure's prefix + +dnl (C) 2003, 2004, 2005 Thomas Vander Stichele + +dnl Copying and distribution of this file, with or without modification, +dnl are permitted in any medium without royalty provided the copyright +dnl notice and this notice are preserved. + +dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) + +dnl example: +dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) +dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local + +AC_DEFUN([AS_AC_EXPAND], +[ + EXP_VAR=[$1] + FROM_VAR=[$2] + + dnl first expand prefix and exec_prefix if necessary + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + dnl if no prefix given, then use /usr/local, the default prefix + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + dnl if no exec_prefix given, then use prefix + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + dnl loop until it doesn't change anymore + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + dnl clean up + full_var=$new_full_var + AC_SUBST([$1], "$full_var") + + dnl restore prefix and exec_prefix + prefix=$prefix_save + exec_prefix=$exec_prefix_save +]) + diff --git a/po/POTFILES.in b/po/POTFILES.in index d165c725ce..9b7a9f6930 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -151,7 +151,6 @@ capplet/settings/mail-settings-view.c data/evolution-alarm-notify.desktop.in.in data/evolution.desktop.in.in data/evolution-settings.desktop.in.in -data/evolution.keys.in.in e-util/e-activity.c e-util/e-alert.c e-util/e-categories-config.c diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 0ecfc5e77c..28efafd2f1 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -9,6 +9,9 @@ addressbook/tools/evolution-addressbook-import.c calendar/gui/calendar-component.c calendar/gui/dialogs/meeting-page.etspec calendar/gui/e-pub-utils.c +data/evolution-alarm-notify.desktop.in +data/evolution-settings.desktop.in +data/evolution.desktop.in designs/OOA/ooa.ui designs/read_receipts/read.ui mail/em-folder-browser.c -- cgit v1.2.3 From 950e820a325fffe422ab70db3facae9573591b41 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 17 May 2010 23:38:18 -0400 Subject: EMailBrowser cleanup. --- mail/e-mail-browser.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c index aaf4f789d6..cf5176faf2 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -280,11 +280,10 @@ close_on_idle_cb (gpointer browser) } static void -mail_browser_message_list_built_cb (EMailBrowser *browser, MessageList *message_list) +mail_browser_message_list_built_cb (EMailBrowser *browser, + MessageList *message_list) { - g_return_if_fail (browser != NULL); g_return_if_fail (E_IS_MAIL_BROWSER (browser)); - g_return_if_fail (message_list != NULL); g_return_if_fail (IS_MESSAGE_LIST (message_list)); if (!message_list_count (message_list)) -- cgit v1.2.3 From 4a2343cb34498c701e71679e3c50c9fc81dd5b80 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 18 May 2010 08:07:19 -0400 Subject: Bug 618902 - Crash when viewing/closing messages quickly Closing an EMailBrowser window causes it to be disposed immediately, but ongoing async operations still hold an EMailBrowser reference -- in particular, regenerating the internal message list and fetching a mail message. The callback functions for these operations were not equipped to deal with the disposed-but-not-yet-finalized object. --- mail/e-mail-browser.c | 3 ++- mail/e-mail-reader.c | 55 ++++++++++++++++++++++++++++++++------------------- mail/message-list.c | 3 +-- 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c index cf5176faf2..cd7ecd32fd 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -445,7 +445,8 @@ mail_browser_dispose (GObject *object) } if (priv->message_list != NULL) { - g_object_unref (priv->message_list); + /* This will cancel a regen operation. */ + gtk_widget_destroy (priv->message_list); priv->message_list = NULL; } diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 53d45fd2e5..bb668bfdac 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -52,7 +52,8 @@ #include "mail/message-list.h" #define E_MAIL_READER_GET_PRIVATE(obj) \ - (mail_reader_get_private (G_OBJECT (obj))) + ((EMailReaderPrivate *) g_object_get_qdata \ + (G_OBJECT (obj), quark_private)) typedef struct _EMailReaderPrivate EMailReaderPrivate; @@ -92,31 +93,24 @@ static GQuark quark_private; static guint signals[LAST_SIGNAL]; static void -mail_reader_finalize (EMailReaderPrivate *priv) +mail_reader_destroy (GObject *object) { - if (priv->message_selected_timeout_id > 0) - g_source_remove (priv->message_selected_timeout_id); - - g_free (priv->mark_read_message_uid); - - g_slice_free (EMailReaderPrivate, priv); + /* This will free the private struct. */ + g_object_set_qdata (object, quark_private, NULL); } -static EMailReaderPrivate * -mail_reader_get_private (GObject *object) +static void +mail_reader_private_free (EMailReaderPrivate *priv) { - EMailReaderPrivate *priv; + if (priv->message_selected_timeout_id > 0) + g_source_remove (priv->message_selected_timeout_id); - priv = g_object_get_qdata (object, quark_private); + if (priv->retrieving_message_operation_id > 0) + mail_msg_cancel (priv->retrieving_message_operation_id); - if (G_UNLIKELY (priv == NULL)) { - priv = g_slice_new0 (EMailReaderPrivate); - g_object_set_qdata_full ( - object, quark_private, priv, - (GDestroyNotify) mail_reader_finalize); - } + g_free (priv->mark_read_message_uid); - return priv; + g_slice_free (EMailReaderPrivate, priv); } static void @@ -1830,6 +1824,14 @@ mail_reader_message_loaded_cb (CamelFolder *folder, priv = E_MAIL_READER_GET_PRIVATE (reader); + /* If the private struct is NULL, the EMailReader was destroyed + * while we were loading the message and we're likely holding the + * last reference. Nothing to do but drop the reference. */ + if (priv == NULL) { + g_object_unref (reader); + return; + } + html_display = e_mail_reader_get_html_display (reader); message_list = e_mail_reader_get_message_list (reader); @@ -2551,7 +2553,7 @@ e_mail_reader_get_type (void) type = g_type_register_static ( G_TYPE_INTERFACE, "EMailReader", &type_info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); + g_type_interface_add_prerequisite (type, GTK_TYPE_OBJECT); } return type; @@ -2726,6 +2728,19 @@ e_mail_reader_init (EMailReader *reader) g_signal_connect_swapped ( message_list, "selection-change", G_CALLBACK (e_mail_reader_changed), reader); + + /* Install a private struct for storing things like flags and + * timeout and asynchronous operation IDs. We delete it when + * the EMailReader is destroyed rather than finalized so that + * asynchronous callbacks holding a reference can detect that + * the reader has been destroyed and drop their reference. */ + g_object_set_qdata_full ( + G_OBJECT (reader), quark_private, + g_slice_new0 (EMailReaderPrivate), + (GDestroyNotify) mail_reader_private_free); + g_signal_connect ( + reader, "destroy", + G_CALLBACK (mail_reader_destroy), NULL); } void diff --git a/mail/message-list.c b/mail/message-list.c index ed1236524c..c7361087b8 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4900,7 +4900,7 @@ mail_regen_list (MessageList *ml, const gchar *search, const gchar *hideexpr, Ca #endif m = mail_msg_new (®en_list_info); - m->ml = ml; + m->ml = g_object_ref (ml); m->search = g_strdup (search); m->hideexpr = g_strdup (hideexpr); m->changes = changes; @@ -4908,7 +4908,6 @@ mail_regen_list (MessageList *ml, const gchar *search, const gchar *hideexpr, Ca m->hidedel = ml->hidedeleted; m->hidejunk = ml->hidejunk; m->thread_subject = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_subject", NULL); - g_object_ref(ml); m->folder = ml->folder; camel_object_ref(m->folder); m->last_row = -1; -- cgit v1.2.3 From 02564bb45b4a4ceac0bdb27ff80a26e65590d220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Tue, 18 May 2010 16:57:11 +0200 Subject: [win32] Implement --reinstall, --show-icons, --hide-icons options to be used by windows default application setting dialogue --- e-util/e-win32-defaults.c | 129 ++++++++++++++++++++++------------------------ shell/main.c | 28 ++++++++++ 2 files changed, 89 insertions(+), 68 deletions(-) diff --git a/e-util/e-win32-defaults.c b/e-util/e-win32-defaults.c index 99b19d1818..be494bf8a3 100644 --- a/e-util/e-win32-defaults.c +++ b/e-util/e-win32-defaults.c @@ -56,45 +56,46 @@ _e_register_mailto_structure (HKEY hKey) static HKEY tmp_subkey = (HKEY) INVALID_HANDLE_VALUE; if ((returnValue = RegSetValueExA (hKey, NULL, 0, REG_SZ, (const BYTE *)"URL:MailTo Protocol", strlen ("URL:MailTo Protocol") + 1))) - return; + goto cleanup; if ((returnValue = RegSetValueExA (hKey, "EditFlags", 0, REG_BINARY, editFlags, G_N_ELEMENTS (editFlags)))) - return; + goto cleanup; if ((returnValue = RegSetValueExA (hKey, "URL Protocol", 0, REG_SZ, (const BYTE *)"", strlen ("") + 1))) - return; + goto cleanup; RegFlushKey (hKey); if ((returnValue = RegCreateKeyExA (hKey, "DefaultIcon", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &tmp_subkey, &dwDisposition))) - return; + goto cleanup; evolutionBinary = _e_win32_sanitize_path (g_build_path (G_DIR_SEPARATOR_S, _e_get_bindir (), EVOBINARY, NULL)); defaultIcon = g_strconcat (evolutionBinary, ",1", NULL); - g_free (evolutionBinary); - if ((returnValue = RegSetValueExA (tmp_subkey, NULL, 0, REG_SZ, (const BYTE *)defaultIcon, strlen (defaultIcon) + 1))) { - g_free (defaultIcon); - return; - } - g_free (defaultIcon); + + if ((returnValue = RegSetValueExA (tmp_subkey, NULL, 0, REG_SZ, (const BYTE *)defaultIcon, strlen (defaultIcon) + 1))) + goto cleanup; + RegFlushKey (tmp_subkey); RegCloseKey (tmp_subkey); if ((returnValue = RegCreateKeyExA (hKey, "shell\\open\\command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &tmp_subkey, &dwDisposition))) - return; + goto cleanup; evolutionBinary = _e_win32_sanitize_path (g_build_path (G_DIR_SEPARATOR_S, _e_get_bindir (), EVOBINARY, NULL)); mailtoCommand = g_strconcat("\"", evolutionBinary, "\" --component=mail mailto:\%1", NULL); - g_free (evolutionBinary); - if ((returnValue = RegSetValueExA (tmp_subkey, NULL, 0, REG_SZ, (const BYTE *)mailtoCommand, strlen(mailtoCommand) + 1))) { - g_free (mailtoCommand); - return; - } - g_free (mailtoCommand); + + if ((returnValue = RegSetValueExA (tmp_subkey, NULL, 0, REG_SZ, (const BYTE *)mailtoCommand, strlen(mailtoCommand) + 1))) + goto cleanup; + RegFlushKey (tmp_subkey); RegCloseKey (tmp_subkey); + +cleanup: + g_free (defaultIcon); + g_free (evolutionBinary); + g_free (mailtoCommand); } static void @@ -106,8 +107,9 @@ _e_win32_register_mailer_impl (WINBOOL system) gchar *dllPath = NULL; gchar *evolutionBinary = NULL; gchar *openCommand = NULL; - gchar *setDefaultCommand = NULL; - gchar *unsetDefaultCommand = NULL; + gchar *reinstallCommand = NULL; + gchar *showIconsCommand = NULL; + gchar *hideIconsCommand = NULL; static HKEY reg_key = (HKEY) INVALID_HANDLE_VALUE; static HKEY reg_subkey = (HKEY) INVALID_HANDLE_VALUE; @@ -115,100 +117,91 @@ _e_win32_register_mailer_impl (WINBOOL system) if ((returnValue = RegCreateKeyExA (system ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, "Software\\Clients\\Mail\\" CANONICALNAME, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_key, &dwDisposition))) - return; + goto cleanup; if ((returnValue = RegSetValueExA (reg_key, NULL, 0, REG_SZ, (const BYTE *)CANONICALNAME, strlen(CANONICALNAME) + 1))) - return; + goto cleanup; dllPath = _e_win32_sanitize_path (g_build_path(G_DIR_SEPARATOR_S, _e_get_bindir (), EUTILDLL, NULL)); - if ((returnValue = RegSetValueExA (reg_key, "DLLPath", 0, REG_SZ, (const BYTE *)dllPath, strlen (dllPath) + 1))) { - g_free (dllPath); - return; - } - g_free(dllPath); + + if ((returnValue = RegSetValueExA (reg_key, "DLLPath", 0, REG_SZ, (const BYTE *)dllPath, strlen (dllPath) + 1))) + goto cleanup; RegFlushKey (reg_key); if ((returnValue = RegCreateKeyExA (reg_key, "DefaultIcon", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_subkey, &dwDisposition))) - return; + goto cleanup; evolutionBinary = _e_win32_sanitize_path (g_build_path (G_DIR_SEPARATOR_S, _e_get_bindir (), EVOBINARY, NULL)); defaultIcon = g_strconcat(evolutionBinary, ",0", NULL); - g_free (evolutionBinary); - if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)defaultIcon, strlen (defaultIcon) + 1))) { - g_free (defaultIcon); - return; - } + + if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)defaultIcon, strlen (defaultIcon) + 1))) + goto cleanup; + RegFlushKey (reg_subkey); RegCloseKey (reg_subkey); if ((returnValue = RegCreateKeyExA (reg_key, "shell\\open\\command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_subkey, &dwDisposition))) - return; + goto cleanup; - evolutionBinary = _e_win32_sanitize_path (g_build_path (G_DIR_SEPARATOR_S, _e_get_bindir (), EVOBINARY, NULL)); - openCommand = g_strconcat("\"", evolutionBinary, "\" --component=mail", NULL); - g_free (evolutionBinary); - if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)openCommand, strlen (openCommand) + 1))) { - g_free (openCommand); - return; - } - g_free (openCommand); + if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)openCommand, strlen (openCommand) + 1))) + goto cleanup; RegFlushKey (reg_subkey); RegCloseKey (reg_subkey); if ((returnValue = RegCreateKeyExA (reg_key, "InstallInfo", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_subkey, &dwDisposition))) - return; - - dllPath = _e_win32_sanitize_path (g_build_path(G_DIR_SEPARATOR_S, _e_get_bindir (), EUTILDLL, NULL)); - - setDefaultCommand = g_strconcat ("%SystemRoot%\\system32\\rundll32.exe \"", dllPath, "\",_e_win32_set_default_mailer", NULL); - unsetDefaultCommand = g_strconcat ("%SystemRoot%\\system32\\rundll32.exe \"", dllPath, "\",_e_win32_unset_default_mailer", NULL); - g_free (dllPath); + goto cleanup; - if ((returnValue = RegSetValueExA (reg_subkey, "ReinstallCommand", 0, REG_EXPAND_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { - g_free (setDefaultCommand); - g_free (unsetDefaultCommand); - return; - } + reinstallCommand = g_strconcat ("\"", evolutionBinary, "\" --reinstall", NULL); + + if ((returnValue = RegSetValueExA (reg_subkey, "ReinstallCommand", 0, REG_EXPAND_SZ, (const BYTE *)reinstallCommand, strlen (reinstallCommand) + 1))) + goto cleanup; + + + showIconsCommand = g_strconcat ("\"", evolutionBinary, "\" --show-icons", NULL); - if ((returnValue = RegSetValueExA (reg_subkey, "ShowIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)setDefaultCommand, strlen (setDefaultCommand) + 1))) { - g_free (setDefaultCommand); - g_free (unsetDefaultCommand); - return; - } + if ((returnValue = RegSetValueExA (reg_subkey, "ShowIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)showIconsCommand, strlen (showIconsCommand) + 1))) + goto cleanup; - if ((returnValue = RegSetValueExA (reg_subkey, "HideIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)unsetDefaultCommand, strlen (unsetDefaultCommand) + 1))) { - g_free (setDefaultCommand); - g_free (unsetDefaultCommand); - return; - } - g_free (setDefaultCommand); - g_free (unsetDefaultCommand); + hideIconsCommand = g_strconcat ("\"", evolutionBinary, "\" --hide-icons", NULL); + + if ((returnValue = RegSetValueExA (reg_subkey, "HideIconsCommand", 0, REG_EXPAND_SZ, (const BYTE *)hideIconsCommand, strlen (hideIconsCommand) + 1))) + goto cleanup; + i = 1; if ((returnValue = RegSetValueExA (reg_subkey, "IconsVisible", 0, REG_DWORD, (BYTE*)&i, sizeof (i)))) - return; + goto cleanup; RegFlushKey (reg_subkey); RegCloseKey (reg_subkey); if ((returnValue = RegCreateKeyExA (reg_key, "Protocols\\mailto", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_subkey, &dwDisposition))) - return; + goto cleanup; if ((returnValue = RegSetValueExA (reg_key, NULL, 0, REG_SZ, (const BYTE *)CANONICALNAME, strlen (CANONICALNAME) + 1))) - return; + goto cleanup; _e_register_mailto_structure (reg_subkey); RegCloseKey (reg_subkey); RegCloseKey (reg_key); + +cleanup: + g_free (defaultIcon); + g_free (dllPath); + g_free (evolutionBinary); + g_free (openCommand); + g_free (reinstallCommand); + g_free (showIconsCommand); + g_free (showIconsCommand); } void diff --git a/shell/main.c b/shell/main.c index b3fdc7ad55..f5d9061d1a 100644 --- a/shell/main.c +++ b/shell/main.c @@ -80,6 +80,11 @@ #endif /* Command-line options. */ +#ifdef G_OS_WIN32 +static gboolean reinstall = FALSE; +static gboolean show_icons = FALSE; +static gboolean hide_icons = FALSE; +#endif /* G_OS_WIN32 */ static gboolean express_mode = FALSE; static gboolean start_online = FALSE; static gboolean start_offline = FALSE; @@ -321,6 +326,14 @@ setup_segv_redirect (void) #endif static GOptionEntry entries[] = { +#ifdef G_OS_WIN32 + { "--reinstall", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &reinstall, + NULL, NULL }, + { "--show-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_icons, + NULL, NULL }, + { "--hide-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &hide_icons, + NULL, NULL }, +#endif /* G_OS_WIN32 */ { "component", 'c', 0, G_OPTION_ARG_STRING, &requested_view, N_("Start Evolution activating the specified component"), NULL }, { "geometry", 'g', 0, G_OPTION_ARG_STRING, &geometry, @@ -490,6 +503,21 @@ main (gint argc, gchar **argv) _e_win32_register_mailer (); + if (reinstall) { + _e_win32_set_default_mailer (); + exit (0); + } + + if (show_icons) { + _e_win32_set_default_mailer (); + exit (0); + } + + if (hide_icons) { + _e_win32_unset_default_mailer (); + exit (0); + } + if (strcmp (gettext (""), "") == 0) { /* No message catalog installed for the current locale * language, so don't bother with the localisations -- cgit v1.2.3 From 9df9e2390311a76bc137c743d5adb996184f6413 Mon Sep 17 00:00:00 2001 From: Jim Ramsay Date: Tue, 18 May 2010 16:39:47 -0400 Subject: Bug 594153 (1/3) - Allow setting alarms on any meeting This introduces a new action_group called "editable" in the comp-editor that can be used by other components to assign actions that should be sensitized separately from the existing "individual" group, such as the "Alarms" and "Show Time as Busy" event actions. This fixes a bug introduced in 0597b877c5bf4d21ac4048742ddf6b11e24877ba where these two actions were accidentally grouped with other actions that should legitimately be in the "individual" group. --- calendar/gui/dialogs/comp-editor.c | 15 +++++++++++---- calendar/gui/dialogs/event-editor.c | 32 +++++++++++++++++++++++--------- calendar/gui/dialogs/event-page.c | 3 +++ calendar/gui/dialogs/memo-page.c | 3 +++ calendar/gui/dialogs/task-page.c | 3 +++ 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 5fe874d476..48f596dec7 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -1073,7 +1073,7 @@ static GtkActionEntry individual_entries[] = { G_CALLBACK (action_attach_cb) } }; -static GtkToggleActionEntry individual_toggle_entries[] = { +static GtkToggleActionEntry personal_toggle_entries[] = { { "view-categories", NULL, @@ -1644,9 +1644,6 @@ comp_editor_init (CompEditor *editor) gtk_action_group_add_actions ( action_group, individual_entries, G_N_ELEMENTS (individual_entries), editor); - gtk_action_group_add_toggle_actions ( - action_group, individual_toggle_entries, - G_N_ELEMENTS (individual_toggle_entries), editor); gtk_action_group_add_radio_actions ( action_group, classification_radio_entries, G_N_ELEMENTS (classification_radio_entries), @@ -1656,6 +1653,16 @@ comp_editor_init (CompEditor *editor) priv->ui_manager, action_group, 0); g_object_unref (action_group); + action_group = gtk_action_group_new ("editable"); + gtk_action_group_set_translation_domain ( + action_group, GETTEXT_PACKAGE); + gtk_action_group_add_toggle_actions ( + action_group, personal_toggle_entries, + G_N_ELEMENTS (personal_toggle_entries), editor); + gtk_ui_manager_insert_action_group ( + priv->ui_manager, action_group, 0); + g_object_unref (action_group); + action_group = gtk_action_group_new ("coordinated"); gtk_action_group_set_translation_domain ( action_group, GETTEXT_PACKAGE); diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c index 23256adff0..c40f2b05d0 100644 --- a/calendar/gui/dialogs/event-editor.c +++ b/calendar/gui/dialogs/event-editor.c @@ -194,7 +194,7 @@ action_show_time_busy_cb (GtkToggleAction *action, event_page_set_show_time_busy (editor->priv->event_page, active); } -static GtkActionEntry event_entries[] = { +static GtkActionEntry editable_entries[] = { { "alarms", "appointment-soon", @@ -202,6 +202,20 @@ static GtkActionEntry event_entries[] = { NULL, N_("Click here to set or unset alarms for this event"), G_CALLBACK (action_alarms_cb) }, +}; + +static GtkToggleActionEntry editable_toggle_entries[] = { + + { "show-time-busy", + GTK_STOCK_DIALOG_ERROR, + N_("Show Time as _Busy"), + NULL, + N_("Toggles whether to show time as busy"), + G_CALLBACK (action_show_time_busy_cb), + FALSE } +}; + +static GtkActionEntry event_entries[] = { { "recurrence", "stock_task-recurring", @@ -227,14 +241,6 @@ static GtkToggleActionEntry event_toggle_entries[] = { N_("Toggles whether to have All Day Event"), G_CALLBACK (action_all_day_event_cb), FALSE }, - - { "show-time-busy", - GTK_STOCK_DIALOG_ERROR, - N_("Show Time as _Busy"), - NULL, - N_("Toggles whether to show time as busy"), - G_CALLBACK (action_show_time_busy_cb), - FALSE } }; static GtkActionEntry meeting_entries[] = { @@ -498,6 +504,14 @@ event_editor_init (EventEditor *ee) action_group, event_toggle_entries, G_N_ELEMENTS (event_toggle_entries), ee); + action_group = comp_editor_get_action_group (editor, "editable"); + gtk_action_group_add_actions ( + action_group, editable_entries, + G_N_ELEMENTS (editable_entries), ee); + gtk_action_group_add_toggle_actions ( + action_group, editable_toggle_entries, + G_N_ELEMENTS (editable_toggle_entries), ee); + action_group = comp_editor_get_action_group (editor, "coordinated"); gtk_action_group_add_actions ( action_group, meeting_entries, diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c index 7d79a2bfb7..6308cda647 100644 --- a/calendar/gui/dialogs/event-page.c +++ b/calendar/gui/dialogs/event-page.c @@ -809,6 +809,9 @@ sensitize_widgets (EventPage *epage) gtk_widget_set_sensitive (priv->invite, (!read_only && sens) || delegate); gtk_widget_set_sensitive (GTK_WIDGET (priv->list_view), !read_only); + action_group = comp_editor_get_action_group (editor, "editable"); + gtk_action_group_set_sensitive (action_group, !read_only); + action_group = comp_editor_get_action_group (editor, "individual"); gtk_action_group_set_sensitive (action_group, sensitize); diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c index f5c6a26400..f1b3a71d03 100644 --- a/calendar/gui/dialogs/memo-page.c +++ b/calendar/gui/dialogs/memo-page.c @@ -376,6 +376,9 @@ sensitize_widgets (MemoPage *mpage) } } + action_group = comp_editor_get_action_group (editor, "editable"); + gtk_action_group_set_sensitive (action_group, !read_only); + action_group = comp_editor_get_action_group (editor, "individual"); gtk_action_group_set_sensitive (action_group, sensitize); } diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c index 33413250ad..9a10f403d7 100644 --- a/calendar/gui/dialogs/task-page.c +++ b/calendar/gui/dialogs/task-page.c @@ -365,6 +365,9 @@ sensitize_widgets (TaskPage *tpage) gtk_widget_set_sensitive (priv->invite, (!read_only && sens)); gtk_widget_set_sensitive (GTK_WIDGET (priv->list_view), !read_only); + action_group = comp_editor_get_action_group (editor, "editable"); + gtk_action_group_set_sensitive (action_group, !read_only); + action_group = comp_editor_get_action_group (editor, "individual"); gtk_action_group_set_sensitive (action_group, sensitize); -- cgit v1.2.3 From aac6a371630b0b28f1b9476123f1c1a54b24c654 Mon Sep 17 00:00:00 2001 From: Jim Ramsay Date: Tue, 18 May 2010 16:50:20 -0400 Subject: Bug 594153 (2/3) - Allow setting alarms on any meeting The "view-time-zone" and "view-categories" actions should not have been grouped with the "individual" action group but rather the "core" action group, as they should always be available regardless of whether or not the element being edited is read-only/owned, as they simply affect visibility of various widgets. This fixes a bug introduced in 0597b877c5bf4d21ac4048742ddf6b11e24877ba where these two actions were accidentally grouped with other actions that should legitimately be in the "individual" group. --- calendar/gui/dialogs/comp-editor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 48f596dec7..6718d8f690 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -1073,7 +1073,7 @@ static GtkActionEntry individual_entries[] = { G_CALLBACK (action_attach_cb) } }; -static GtkToggleActionEntry personal_toggle_entries[] = { +static GtkToggleActionEntry core_toggle_entries[] = { { "view-categories", NULL, @@ -1634,6 +1634,9 @@ comp_editor_init (CompEditor *editor) gtk_action_group_add_actions ( action_group, core_entries, G_N_ELEMENTS (core_entries), editor); + gtk_action_group_add_toggle_actions ( + action_group, core_toggle_entries, + G_N_ELEMENTS (core_toggle_entries), editor); gtk_ui_manager_insert_action_group ( priv->ui_manager, action_group, 0); g_object_unref (action_group); @@ -1656,9 +1659,6 @@ comp_editor_init (CompEditor *editor) action_group = gtk_action_group_new ("editable"); gtk_action_group_set_translation_domain ( action_group, GETTEXT_PACKAGE); - gtk_action_group_add_toggle_actions ( - action_group, personal_toggle_entries, - G_N_ELEMENTS (personal_toggle_entries), editor); gtk_ui_manager_insert_action_group ( priv->ui_manager, action_group, 0); g_object_unref (action_group); -- cgit v1.2.3 From c6c287d275f761e88c37bb7dbcf4676bf1363602 Mon Sep 17 00:00:00 2001 From: Jim Ramsay Date: Wed, 28 Apr 2010 10:46:15 -0400 Subject: Bug 594153 (3/3) - Allow setting alarms on any meeting By tying the attachment view "editable" action group to comp-editor "individual" group, these add/remove actions are marked sensitive / insensitive in sync with the existing "Insert" menu items which are already in the "individual" group. Though not introduced with the other symptoms of this bug (0597b877c5bf4d21ac4048742ddf6b11e24877ba), the descreptency fixed here is integrally related. --- calendar/gui/dialogs/comp-editor.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 6718d8f690..0b1701de6f 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -1587,6 +1588,7 @@ comp_editor_init (CompEditor *editor) GtkTargetList *target_list; GtkTargetEntry *targets; GtkActionGroup *action_group; + GtkActionGroup *action_group_2; GtkAction *action; GtkWidget *container; GtkWidget *widget; @@ -1808,6 +1810,13 @@ comp_editor_init (CompEditor *editor) gtk_window_set_type_hint ( GTK_WINDOW (editor), GDK_WINDOW_TYPE_HINT_NORMAL); + action_group = comp_editor_get_action_group (editor, "individual"); + action_group_2 = e_attachment_view_get_action_group (view, "editable"); + + e_binding_new ( + action_group, "sensitive", + action_group_2, "sensitive"); + /* Listen for attachment store changes. */ store = e_attachment_view_get_store (view); -- cgit v1.2.3 From b995d99498160db3006cb4288b5048f3396d1d88 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 18 May 2010 20:08:25 -0400 Subject: Bug 619010 - Mailer's crash avoidance features are broken --- modules/mail/e-mail-shell-content.c | 53 +++++++++++++++++++++--------------- modules/mail/e-mail-shell-settings.c | 4 +++ shell/main.c | 3 ++ 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index 9ac74a48ea..846c1ee854 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -70,10 +70,9 @@ struct _EMailShellContentPrivate { /* Signal handler IDs */ guint message_list_built_id; - guint group_by_threads : 1; - guint preview_visible : 1; - guint suppress_message_selection : 1; - guint show_deleted : 1; + guint group_by_threads : 1; + guint preview_visible : 1; + guint show_deleted : 1; }; enum { @@ -121,8 +120,9 @@ mail_shell_content_message_list_built_cb (EMailShellContent *mail_shell_content, MessageList *message_list) { EMailShellContentPrivate *priv = mail_shell_content->priv; - EShellContent *shell_content; EShellView *shell_view; + EShellWindow *shell_window; + EShellContent *shell_content; GKeyFile *key_file; gchar *uid; @@ -132,6 +132,8 @@ mail_shell_content_message_list_built_cb (EMailShellContent *mail_shell_content, shell_content = E_SHELL_CONTENT (mail_shell_content); shell_view = e_shell_content_get_shell_view (shell_content); + shell_window = e_shell_view_get_shell_window (shell_view); + key_file = e_shell_view_get_state_key_file (shell_view); if (message_list->cursor_uid != NULL) @@ -140,10 +142,11 @@ mail_shell_content_message_list_built_cb (EMailShellContent *mail_shell_content, else if (message_list->folder_uri == NULL) uid = NULL; - else if (mail_shell_content->priv->suppress_message_selection) + else if (e_shell_window_get_safe_mode (shell_window)) { + e_shell_window_set_safe_mode (shell_window, FALSE); uid = NULL; - else { + } else { const gchar *folder_uri; const gchar *key; gchar *group_name; @@ -566,29 +569,33 @@ mail_shell_content_set_folder (EMailReader *reader, CamelFolder *folder, const gchar *folder_uri) { + EShell *shell; EShellView *shell_view; + EShellWindow *shell_window; EShellContent *shell_content; + EShellSettings *shell_settings; EMailShellContentPrivate *priv; EMailReaderIface *default_iface; GtkWidget *message_list; - CamelFolder *old_folder; GKeyFile *key_file; gchar *group_name; const gchar *key; - gboolean different_folder; gboolean value; GError *error = NULL; priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (reader); - old_folder = e_mail_reader_get_folder (reader); + shell_content = E_SHELL_CONTENT (reader); + shell_view = e_shell_content_get_shell_view (shell_content); + shell_window = e_shell_view_get_shell_window (shell_view); + + shell = e_shell_window_get_shell (shell_window); + shell_settings = e_shell_get_shell_settings (shell); + message_list = e_mail_reader_get_message_list (reader); message_list_freeze (MESSAGE_LIST (message_list)); - different_folder = - (old_folder != NULL && folder != old_folder); - /* Chain up to interface's default set_folder() method. */ default_iface = g_type_default_interface_peek (E_TYPE_MAIL_READER); default_iface->set_folder (reader, folder, folder_uri); @@ -598,12 +605,6 @@ mail_shell_content_set_folder (EMailReader *reader, mail_refresh_folder (folder, NULL, NULL); - /* This function gets triggered several times at startup, - * so we don't want to reset the message suppression state - * unless we're actually switching to a different folder. */ - if (different_folder) - priv->suppress_message_selection = FALSE; - /* This is a one-time-only callback. */ if (MESSAGE_LIST (message_list)->cursor_uid == NULL && priv->message_list_built_id == 0) @@ -614,9 +615,6 @@ mail_shell_content_set_folder (EMailReader *reader, /* Restore the folder's preview and threaded state. */ - shell_content = E_SHELL_CONTENT (reader); - shell_view = e_shell_content_get_shell_view (shell_content); - key_file = e_shell_view_get_state_key_file (shell_view); group_name = g_strdup_printf ("Folder %s", folder_uri); @@ -637,6 +635,17 @@ mail_shell_content_set_folder (EMailReader *reader, g_clear_error (&error); } + /* XXX This is a little confusing and needs rethought. The + * EShellWindow:safe-mode property blocks automatic message + * selection, but the "mail-safe-list" shell setting blocks + * both the preview pane and automatic message selection. */ + if (e_shell_settings_get_boolean (shell_settings, "mail-safe-list")) { + e_shell_settings_set_boolean ( + shell_settings, "mail-safe-list", FALSE); + e_shell_window_set_safe_mode (shell_window, TRUE); + value = FALSE; + } + e_mail_shell_content_set_preview_visible ( E_MAIL_SHELL_CONTENT (shell_content), value); diff --git a/modules/mail/e-mail-shell-settings.c b/modules/mail/e-mail-shell-settings.c index 1434951b81..48fd042d58 100644 --- a/modules/mail/e-mail-shell-settings.c +++ b/modules/mail/e-mail-shell-settings.c @@ -165,6 +165,10 @@ e_mail_shell_settings_init (EShell *shell) "mail-reply-style", "/apps/evolution/mail/format/reply_style"); + e_shell_settings_install_property_for_key ( + "mail-safe-list", + "/apps/evolution/mail/display/safe_list"); + e_shell_settings_install_property_for_key ( "mail-show-animated-images", "/apps/evolution/mail/display/animated_images"); diff --git a/shell/main.c b/shell/main.c index f5d9061d1a..0ee9478858 100644 --- a/shell/main.c +++ b/shell/main.c @@ -555,6 +555,9 @@ main (gint argc, gchar **argv) key = "/apps/evolution/addressbook/display/show_preview"; gconf_client_set_bool (client, key, FALSE, NULL); + key = "/apps/evolution/calendar/display/show_memo_preview"; + gconf_client_set_bool (client, key, FALSE, NULL); + key = "/apps/evolution/calendar/display/show_task_preview"; gconf_client_set_bool (client, key, FALSE, NULL); } -- cgit v1.2.3 From 38711248e319902e7396e41e1c64c732b1645bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Wed, 19 May 2010 10:20:36 +0200 Subject: [win32] Try to get the default application registration right --- e-util/e-win32-defaults.c | 3 ++- shell/main.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/e-util/e-win32-defaults.c b/e-util/e-win32-defaults.c index be494bf8a3..8fb2bc3cb9 100644 --- a/e-util/e-win32-defaults.c +++ b/e-util/e-win32-defaults.c @@ -146,6 +146,7 @@ _e_win32_register_mailer_impl (WINBOOL system) if ((returnValue = RegCreateKeyExA (reg_key, "shell\\open\\command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ®_subkey, &dwDisposition))) goto cleanup; + openCommand = g_strconcat("\"", evolutionBinary, "\" --component=mail", NULL); if ((returnValue = RegSetValueExA (reg_subkey, NULL, 0, REG_SZ, (const BYTE *)openCommand, strlen (openCommand) + 1))) goto cleanup; @@ -201,7 +202,7 @@ cleanup: g_free (openCommand); g_free (reinstallCommand); g_free (showIconsCommand); - g_free (showIconsCommand); + g_free (hideIconsCommand); } void diff --git a/shell/main.c b/shell/main.c index 0ee9478858..41ca79eac8 100644 --- a/shell/main.c +++ b/shell/main.c @@ -327,11 +327,11 @@ setup_segv_redirect (void) static GOptionEntry entries[] = { #ifdef G_OS_WIN32 - { "--reinstall", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &reinstall, + { "reinstall", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &reinstall, NULL, NULL }, - { "--show-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_icons, + { "show-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_icons, NULL, NULL }, - { "--hide-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &hide_icons, + { "hide-icons", '\0', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &hide_icons, NULL, NULL }, #endif /* G_OS_WIN32 */ { "component", 'c', 0, G_OPTION_ARG_STRING, &requested_view, -- cgit v1.2.3 From 5d2de892f506cc6b870ffc02687213d3ac9e6132 Mon Sep 17 00:00:00 2001 From: Gert Kulyk Date: Wed, 19 May 2010 13:39:33 +0200 Subject: Bug #617041 - Set translation domain for e-mail-reader actions --- mail/e-mail-reader.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index bb668bfdac..c670446a50 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2606,6 +2606,7 @@ e_mail_reader_init (EMailReader *reader) /* Add the other actions the normal way. */ + gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions ( action_group, mail_reader_entries, G_N_ELEMENTS (mail_reader_entries), reader); -- cgit v1.2.3 From cacfd2114e7dd56cc12613d625bac450cc69b4ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Wed, 24 Mar 2010 16:51:31 +0100 Subject: Bug 612082 - Crash in em_format_snoop_type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is not a final solution to the bug, but merely avoids a NULL pointer dereference which is likely a symptom of a deeper problem. Signed-off-by: Michel Dänzer --- em-format/em-format.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/em-format/em-format.c b/em-format/em-format.c index 19913ef5d1..a2034b4b20 100644 --- a/em-format/em-format.c +++ b/em-format/em-format.c @@ -2015,10 +2015,11 @@ em_format_snoop_type (CamelMimePart *part) dw = camel_medium_get_content_object((CamelMedium *)part); if (!camel_data_wrapper_is_offline(dw)) { - CamelStreamMem *mem = (CamelStreamMem *)camel_stream_mem_new(); + GByteArray *buffer = g_byte_array_new (); + CamelStreamMem *mem = (CamelStreamMem *)camel_stream_mem_new_with_byte_array(buffer); if (camel_data_wrapper_decode_to_stream(dw, (CamelStream *)mem) > 0) { - gchar *ct = g_content_type_guess (filename, mem->buffer->data, mem->buffer->len, NULL); + gchar *ct = g_content_type_guess (filename, buffer->data, buffer->len, NULL); if (ct) magic_type = g_content_type_get_mime_type (ct); -- cgit v1.2.3 From be538a4cff38c7b58468e7b2c7fa05f9dc8cb476 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 19 May 2010 22:01:49 -0400 Subject: Improve attachment bar selection behavior. Some improvements made while investigating bug #608855. This does not solve the bug however, and in fact I now believe the bug is actually a GTK+ issue after reproducing the bug in gtk-demo. These improvements restore multiple selections via Ctrl+Click and Shift+Click, and also reduces the frequency that we synchronize the selection between Icon View and Tree View. --- mail/e-mail-attachment-bar.c | 64 +++++++++++++-------------------------- widgets/misc/e-attachment-paned.c | 62 ++++++++++++------------------------- widgets/misc/e-attachment-view.c | 38 +++++++++++------------ 3 files changed, 59 insertions(+), 105 deletions(-) diff --git a/mail/e-mail-attachment-bar.c b/mail/e-mail-attachment-bar.c index 88198438b7..aa5abd09fb 100644 --- a/mail/e-mail-attachment-bar.c +++ b/mail/e-mail-attachment-bar.c @@ -63,36 +63,6 @@ enum { static gpointer parent_class; -static void -mail_attachment_bar_sync_icon_view (EMailAttachmentBar *bar) -{ - EAttachmentView *source; - EAttachmentView *target; - - source = E_ATTACHMENT_VIEW (bar->priv->tree_view); - target = E_ATTACHMENT_VIEW (bar->priv->icon_view); - - /* Only sync if the tree view is active. This prevents the - * two views from endlessly trying to sync with each other. */ - if (e_mail_attachment_bar_get_active_view (bar) == 1) - e_attachment_view_sync_selection (source, target); -} - -static void -mail_attachment_bar_sync_tree_view (EMailAttachmentBar *bar) -{ - EAttachmentView *source; - EAttachmentView *target; - - source = E_ATTACHMENT_VIEW (bar->priv->icon_view); - target = E_ATTACHMENT_VIEW (bar->priv->tree_view); - - /* Only sync if the icon view is active. This prevents the - * two views from endlessly trying to sync with each other. */ - if (e_mail_attachment_bar_get_active_view (bar) == 0) - e_attachment_view_sync_selection (source, target); -} - static void mail_attachment_bar_update_status (EMailAttachmentBar *bar) { @@ -516,7 +486,6 @@ static void mail_attachment_bar_init (EMailAttachmentBar *bar) { EAttachmentView *view; - GtkTreeSelection *selection; GtkSizeGroup *size_group; GtkWidget *container; GtkWidget *widget; @@ -562,7 +531,7 @@ mail_attachment_bar_init (EMailAttachmentBar *bar) gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); bar->priv->tree_frame = g_object_ref (widget); - gtk_widget_show (widget); + gtk_widget_hide (widget); container = widget; @@ -645,17 +614,6 @@ mail_attachment_bar_init (EMailAttachmentBar *bar) bar->priv->status_label = g_object_ref (widget); gtk_widget_show (widget); - selection = gtk_tree_view_get_selection ( - GTK_TREE_VIEW (bar->priv->tree_view)); - - g_signal_connect_swapped ( - selection, "changed", - G_CALLBACK (mail_attachment_bar_sync_icon_view), bar); - - g_signal_connect_swapped ( - bar->priv->icon_view, "selection-changed", - G_CALLBACK (mail_attachment_bar_sync_tree_view), bar); - g_signal_connect_swapped ( bar->priv->model, "notify::num-attachments", G_CALLBACK (mail_attachment_bar_update_status), bar); @@ -722,9 +680,15 @@ void e_mail_attachment_bar_set_active_view (EMailAttachmentBar *bar, gint active_view) { + EAttachmentView *source; + EAttachmentView *target; + g_return_if_fail (E_IS_MAIL_ATTACHMENT_BAR (bar)); g_return_if_fail (active_view >= 0 && active_view < NUM_VIEWS); + if (active_view == bar->priv->active_view) + return; + bar->priv->active_view = active_view; if (active_view == 0) { @@ -735,6 +699,20 @@ e_mail_attachment_bar_set_active_view (EMailAttachmentBar *bar, gtk_widget_show (bar->priv->tree_frame); } + /* Synchronize the item selection of the view we're + * switching TO with the view we're switching FROM. */ + if (active_view == 0) { + /* from tree view to icon view */ + source = E_ATTACHMENT_VIEW (bar->priv->tree_view); + target = E_ATTACHMENT_VIEW (bar->priv->icon_view); + } else { + /* from icon view to tree view */ + source = E_ATTACHMENT_VIEW (bar->priv->icon_view); + target = E_ATTACHMENT_VIEW (bar->priv->tree_view); + } + + e_attachment_view_sync_selection (source, target); + g_object_notify (G_OBJECT (bar), "active-view"); } diff --git a/widgets/misc/e-attachment-paned.c b/widgets/misc/e-attachment-paned.c index 8b4c2bfb96..d47fe9c8c7 100644 --- a/widgets/misc/e-attachment-paned.c +++ b/widgets/misc/e-attachment-paned.c @@ -91,36 +91,6 @@ attachment_paned_notify_cb (EAttachmentPaned *paned, gtk_label_set_text_with_mnemonic (label, text); } -static void -attachment_paned_sync_icon_view (EAttachmentPaned *paned) -{ - EAttachmentView *source; - EAttachmentView *target; - - source = E_ATTACHMENT_VIEW (paned->priv->tree_view); - target = E_ATTACHMENT_VIEW (paned->priv->icon_view); - - /* Only sync if the tree view is active. This prevents the - * two views from endlessly trying to sync with each other. */ - if (e_attachment_paned_get_active_view (paned) == 1) - e_attachment_view_sync_selection (source, target); -} - -static void -attachment_paned_sync_tree_view (EAttachmentPaned *paned) -{ - EAttachmentView *source; - EAttachmentView *target; - - source = E_ATTACHMENT_VIEW (paned->priv->icon_view); - target = E_ATTACHMENT_VIEW (paned->priv->tree_view); - - /* Only sync if the icon view is active. This prevents the - * two views from endlessly trying to sync with each other. */ - if (e_attachment_paned_get_active_view (paned) == 0) - e_attachment_view_sync_selection (source, target); -} - static void attachment_paned_update_status (EAttachmentPaned *paned) { @@ -509,7 +479,6 @@ static void attachment_paned_init (EAttachmentPaned *paned) { EAttachmentView *view; - GtkTreeSelection *selection; GtkSizeGroup *size_group; GtkWidget *container; GtkWidget *widget; @@ -662,17 +631,6 @@ attachment_paned_init (EAttachmentPaned *paned) paned->priv->status_label = g_object_ref (widget); gtk_widget_hide (widget); - selection = gtk_tree_view_get_selection ( - GTK_TREE_VIEW (paned->priv->tree_view)); - - g_signal_connect_swapped ( - selection, "changed", - G_CALLBACK (attachment_paned_sync_icon_view), paned); - - g_signal_connect_swapped ( - paned->priv->icon_view, "selection-changed", - G_CALLBACK (attachment_paned_sync_tree_view), paned); - g_signal_connect_swapped ( paned->priv->expander, "notify::expanded", G_CALLBACK (attachment_paned_notify_cb), paned); @@ -750,11 +708,31 @@ void e_attachment_paned_set_active_view (EAttachmentPaned *paned, gint active_view) { + EAttachmentView *source; + EAttachmentView *target; + g_return_if_fail (E_IS_ATTACHMENT_PANED (paned)); g_return_if_fail (active_view >= 0 && active_view < NUM_VIEWS); + if (active_view == paned->priv->active_view) + return; + paned->priv->active_view = active_view; + /* Synchronize the item selection of the view we're + * switching TO with the view we're switching FROM. */ + if (active_view == 0) { + /* from tree view to icon view */ + source = E_ATTACHMENT_VIEW (paned->priv->tree_view); + target = E_ATTACHMENT_VIEW (paned->priv->icon_view); + } else { + /* from icon view to tree view */ + source = E_ATTACHMENT_VIEW (paned->priv->icon_view); + target = E_ATTACHMENT_VIEW (paned->priv->tree_view); + } + + e_attachment_view_sync_selection (source, target); + g_object_notify (G_OBJECT (paned), "active-view"); } diff --git a/widgets/misc/e-attachment-view.c b/widgets/misc/e-attachment-view.c index 5a5db57e07..ab98417830 100644 --- a/widgets/misc/e-attachment-view.c +++ b/widgets/misc/e-attachment-view.c @@ -1076,29 +1076,13 @@ e_attachment_view_button_press_event (EAttachmentView *view, { GtkTreePath *path; gboolean editable; - gboolean item_clicked; + gboolean handled = FALSE; g_return_val_if_fail (E_IS_ATTACHMENT_VIEW (view), FALSE); g_return_val_if_fail (event != NULL, FALSE); editable = e_attachment_view_get_editable (view); - - /* If the user clicked on a selected item, retain the current - * selection. If the user clicked on an unselected item, select - * the clicked item only. If the user did not click on an item, - * clear the current selection. */ path = e_attachment_view_get_path_at_pos (view, event->x, event->y); - if (path != NULL) { - if (!e_attachment_view_path_is_selected (view, path)) { - e_attachment_view_unselect_all (view); - e_attachment_view_select_path (view, path); - } - gtk_tree_path_free (path); - item_clicked = TRUE; - } else { - e_attachment_view_unselect_all (view); - item_clicked = FALSE; - } /* Cancel drag and drop if there are no selected items, * or if any of the selected items are loading or saving. */ @@ -1119,17 +1103,31 @@ e_attachment_view_button_press_event (EAttachmentView *view, } if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { + /* If the user clicked on a selected item, retain the + * current selection. If the user clicked on an unselected + * item, select the clicked item only. If the user did not + * click on an item, clear the current selection. */ + if (path == NULL) + e_attachment_view_unselect_all (view); + else if (!e_attachment_view_path_is_selected (view, path)) { + e_attachment_view_unselect_all (view); + e_attachment_view_select_path (view, path); + } + /* Non-editable attachment views should only show a * popup menu when right-clicking on an attachment, * but editable views can show the menu any time. */ - if (item_clicked || editable) { + if (path != NULL || editable) { e_attachment_view_show_popup_menu ( view, event, NULL, NULL); - return TRUE; + handled = TRUE; } } - return FALSE; + if (path != NULL) + gtk_tree_path_free (path); + + return handled; } gboolean -- cgit v1.2.3 From 105543c804f91cd269f023fe36f2e9cc3f108760 Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Thu, 20 May 2010 13:11:04 +0530 Subject: Create the source groups required to ensure local adresssbooks and calendars are created --- modules/addressbook/e-book-shell-backend.c | 1 + modules/calendar/e-cal-shell-backend.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/modules/addressbook/e-book-shell-backend.c b/modules/addressbook/e-book-shell-backend.c index 1166cd61c3..74dbbfcf7f 100644 --- a/modules/addressbook/e-book-shell-backend.c +++ b/modules/addressbook/e-book-shell-backend.c @@ -169,6 +169,7 @@ book_shell_backend_ensure_sources (EShellBackend *shell_backend) source_group = e_source_group_new (name, base_uri); e_source_list_add_group (priv->source_list, source_group, -1); + on_this_computer = source_group; g_object_unref (source_group); } diff --git a/modules/calendar/e-cal-shell-backend.c b/modules/calendar/e-cal-shell-backend.c index 30bad0a4bf..5e6f390189 100644 --- a/modules/calendar/e-cal-shell-backend.c +++ b/modules/calendar/e-cal-shell-backend.c @@ -166,6 +166,13 @@ cal_shell_backend_ensure_sources (EShellBackend *shell_backend) * Open ... because of invalid URI" error. */ save_list = TRUE; } + } else { + ESourceGroup *source_group; + + source_group = e_source_group_new (name, base_uri); + e_source_list_add_group (priv->source_list, source_group, -1); + on_this_computer = source_group; + g_object_unref (source_group); } name = _("Personal"); -- cgit v1.2.3 From 40fb13f6a3200ade9449090ef84278ee06f76fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Thu, 20 May 2010 14:36:41 +0200 Subject: On Windows, some LDIF files can have .ldi extension --- addressbook/importers/evolution-ldif-importer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addressbook/importers/evolution-ldif-importer.c b/addressbook/importers/evolution-ldif-importer.c index 41dda05a40..cfc363756d 100644 --- a/addressbook/importers/evolution-ldif-importer.c +++ b/addressbook/importers/evolution-ldif-importer.c @@ -565,8 +565,8 @@ ldif_getwidget(EImport *ei, EImportTarget *target, EImportImporter *im) return vbox; } -static const gchar *supported_extensions[2] = { - ".ldif", NULL +static const gchar *supported_extensions[3] = { + ".ldif", ".ldi", NULL }; static gboolean -- cgit v1.2.3 From 53dd5f199f5e15f16c632606e616e51be886f345 Mon Sep 17 00:00:00 2001 From: Gert Michael Kulyk Date: Thu, 20 May 2010 21:16:19 +0200 Subject: Bug #616889 - Force 24h format for locales not supporting 12h format --- calendar/gui/dialogs/cal-prefs-dialog.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/calendar/gui/dialogs/cal-prefs-dialog.c b/calendar/gui/dialogs/cal-prefs-dialog.c index 5baf22306c..35b946137f 100644 --- a/calendar/gui/dialogs/cal-prefs-dialog.c +++ b/calendar/gui/dialogs/cal-prefs-dialog.c @@ -599,6 +599,11 @@ calendar_prefs_dialog_construct (CalendarPrefsDialog *prefs, locale_supports_12_hour_format = calendar_config_locale_supports_12_hour_format (); + /* Force 24 hour format for locales which don't support 12 hour format */ + if (!locale_supports_12_hour_format + && !e_shell_settings_get_boolean (shell_settings, "cal-use-24-hour-format")) + e_shell_settings_set_boolean (shell_settings, "cal-use-24-hour-format", TRUE); + /* Make sure our custom widget classes are registered with * GType before we load the GtkBuilder definition file. */ E_TYPE_DATE_EDIT; -- cgit v1.2.3 From 44c5781fc3a8e684b3e1973114577113a571cdd2 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 20 May 2010 17:02:47 -0400 Subject: Bug 608855 - Can't drag and drop multiple attachments Based on EggTreeMultiDragSource in libegg. --- widgets/misc/e-attachment-icon-view.c | 15 ++++ widgets/misc/e-attachment-tree-view.c | 15 ++++ widgets/misc/e-attachment-view.c | 160 +++++++++++++++++++++++++++++----- widgets/misc/e-attachment-view.h | 9 ++ 4 files changed, 175 insertions(+), 24 deletions(-) diff --git a/widgets/misc/e-attachment-icon-view.c b/widgets/misc/e-attachment-icon-view.c index edfecb57d8..57301213dd 100644 --- a/widgets/misc/e-attachment-icon-view.c +++ b/widgets/misc/e-attachment-icon-view.c @@ -129,6 +129,20 @@ attachment_icon_view_button_release_event (GtkWidget *widget, button_release_event (widget, event); } +static gboolean +attachment_icon_view_motion_notify_event (GtkWidget *widget, + GdkEventMotion *event) +{ + EAttachmentView *view = E_ATTACHMENT_VIEW (widget); + + if (e_attachment_view_motion_notify_event (view, event)) + return TRUE; + + /* Chain up to parent's motion_notify_event() method. */ + return GTK_WIDGET_CLASS (parent_class)-> + motion_notify_event (widget, event); +} + static gboolean attachment_icon_view_key_press_event (GtkWidget *widget, GdkEventKey *event) @@ -408,6 +422,7 @@ attachment_icon_view_class_init (EAttachmentIconViewClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->button_press_event = attachment_icon_view_button_press_event; widget_class->button_release_event = attachment_icon_view_button_release_event; + widget_class->motion_notify_event = attachment_icon_view_motion_notify_event; widget_class->key_press_event = attachment_icon_view_key_press_event; widget_class->drag_begin = attachment_icon_view_drag_begin; widget_class->drag_end = attachment_icon_view_drag_end; diff --git a/widgets/misc/e-attachment-tree-view.c b/widgets/misc/e-attachment-tree-view.c index 5729a68069..09602ca186 100644 --- a/widgets/misc/e-attachment-tree-view.c +++ b/widgets/misc/e-attachment-tree-view.c @@ -143,6 +143,20 @@ attachment_tree_view_button_release_event (GtkWidget *widget, button_release_event (widget, event); } +static gboolean +attachment_tree_view_motion_notify_event (GtkWidget *widget, + GdkEventMotion *event) +{ + EAttachmentView *view = E_ATTACHMENT_VIEW (widget); + + if (e_attachment_view_motion_notify_event (view, event)) + return TRUE; + + /* Chain up to parent's motion_notify_event() method. */ + return GTK_WIDGET_CLASS (parent_class)-> + motion_notify_event (widget, event); +} + static gboolean attachment_tree_view_key_press_event (GtkWidget *widget, GdkEventKey *event) @@ -440,6 +454,7 @@ attachment_tree_view_class_init (EAttachmentTreeViewClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->button_press_event = attachment_tree_view_button_press_event; widget_class->button_release_event = attachment_tree_view_button_release_event; + widget_class->motion_notify_event = attachment_tree_view_motion_notify_event; widget_class->key_press_event = attachment_tree_view_key_press_event; widget_class->drag_begin = attachment_tree_view_drag_begin; widget_class->drag_end = attachment_tree_view_drag_end; diff --git a/widgets/misc/e-attachment-view.c b/widgets/misc/e-attachment-view.c index ab98417830..2ff6fb4dab 100644 --- a/widgets/misc/e-attachment-view.c +++ b/widgets/misc/e-attachment-view.c @@ -875,6 +875,12 @@ e_attachment_view_finalize (EAttachmentView *view) priv = e_attachment_view_get_private (view); g_ptr_array_free (priv->handlers, TRUE); + + g_list_foreach (priv->event_list, (GFunc) gdk_event_free, NULL); + g_list_free (priv->event_list); + + g_list_foreach (priv->selected, (GFunc) g_object_unref, NULL); + g_list_free (priv->selected); } EAttachmentViewPrivate * @@ -1074,30 +1080,55 @@ gboolean e_attachment_view_button_press_event (EAttachmentView *view, GdkEventButton *event) { + EAttachmentViewPrivate *priv; GtkTreePath *path; gboolean editable; gboolean handled = FALSE; + gboolean path_is_selected = FALSE; g_return_val_if_fail (E_IS_ATTACHMENT_VIEW (view), FALSE); g_return_val_if_fail (event != NULL, FALSE); + priv = e_attachment_view_get_private (view); + + if (g_list_find (priv->event_list, event) != NULL) + return FALSE; + + if (priv->event_list != NULL) { + /* Save the event to be propagated in order. */ + priv->event_list = g_list_append ( + priv->event_list, + gdk_event_copy ((GdkEvent *) event)); + return TRUE; + } + editable = e_attachment_view_get_editable (view); path = e_attachment_view_get_path_at_pos (view, event->x, event->y); + path_is_selected = e_attachment_view_path_is_selected (view, path); - /* Cancel drag and drop if there are no selected items, - * or if any of the selected items are loading or saving. */ if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { GList *selected, *iter; gboolean busy = FALSE; selected = e_attachment_view_get_selected_attachments (view); + for (iter = selected; iter != NULL; iter = iter->next) { EAttachment *attachment = iter->data; busy |= e_attachment_get_loading (attachment); busy |= e_attachment_get_saving (attachment); } - if (selected == NULL || busy) - e_attachment_view_drag_source_unset (view); + + /* Prepare for dragging if the clicked item is selected + * and none of the selected items are loading or saving. */ + if (path_is_selected && !busy) { + priv->start_x = event->x; + priv->start_y = event->y; + priv->event_list = g_list_append ( + priv->event_list, + gdk_event_copy ((GdkEvent *) event)); + handled = TRUE; + } + g_list_foreach (selected, (GFunc) g_object_unref, NULL); g_list_free (selected); } @@ -1109,7 +1140,7 @@ e_attachment_view_button_press_event (EAttachmentView *view, * click on an item, clear the current selection. */ if (path == NULL) e_attachment_view_unselect_all (view); - else if (!e_attachment_view_path_is_selected (view, path)) { + else if (!path_is_selected) { e_attachment_view_unselect_all (view); e_attachment_view_select_path (view, path); } @@ -1134,17 +1165,63 @@ gboolean e_attachment_view_button_release_event (EAttachmentView *view, GdkEventButton *event) { + EAttachmentViewPrivate *priv; + GtkWidget *widget = GTK_WIDGET (view); + GList *iter; + g_return_val_if_fail (E_IS_ATTACHMENT_VIEW (view), FALSE); g_return_val_if_fail (event != NULL, FALSE); - /* Restore the attachment view as a drag source, in case - * we had to cancel during a button press event. */ - if (event->button == 1) - e_attachment_view_drag_source_set (view); + priv = e_attachment_view_get_private (view); + + for (iter = priv->event_list; iter != NULL; iter = iter->next) { + GdkEvent *event = iter->data; + + gtk_propagate_event (widget, event); + gdk_event_free (event); + } + + g_list_free (priv->event_list); + priv->event_list = NULL; return FALSE; } +gboolean +e_attachment_view_motion_notify_event (EAttachmentView *view, + GdkEventMotion *event) +{ + EAttachmentViewPrivate *priv; + GtkWidget *widget = GTK_WIDGET (view); + GdkDragContext *context; + GtkTargetList *targets; + + g_return_val_if_fail (E_IS_ATTACHMENT_VIEW (view), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + priv = e_attachment_view_get_private (view); + + if (priv->event_list == NULL) + return FALSE; + + if (!gtk_drag_check_threshold ( + widget, priv->start_x, priv->start_y, event->x, event->y)) + return TRUE; + + g_list_foreach (priv->event_list, (GFunc) gdk_event_free, NULL); + g_list_free (priv->event_list); + priv->event_list = NULL; + + targets = gtk_drag_source_get_target_list (widget); + + context = gtk_drag_begin ( + widget, targets, GDK_ACTION_COPY, 1, (GdkEvent *) event); + + gtk_drag_set_icon_default (context); + + return TRUE; +} + gboolean e_attachment_view_key_press_event (EAttachmentView *view, GdkEventKey *event) @@ -1199,7 +1276,10 @@ e_attachment_view_path_is_selected (EAttachmentView *view, EAttachmentViewIface *iface; g_return_val_if_fail (E_IS_ATTACHMENT_VIEW (view), FALSE); - g_return_val_if_fail (path != NULL, FALSE); + + /* Handle NULL paths gracefully. */ + if (path == NULL) + return FALSE; iface = E_ATTACHMENT_VIEW_GET_IFACE (view); g_return_val_if_fail (iface->path_is_selected != NULL, FALSE); @@ -1285,18 +1365,23 @@ e_attachment_view_sync_selection (EAttachmentView *view, void e_attachment_view_drag_source_set (EAttachmentView *view) { + EAttachmentViewIface *iface; GtkTargetEntry *targets; GtkTargetList *list; gint n_targets; g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); + iface = E_ATTACHMENT_VIEW_GET_IFACE (view); + if (iface->drag_source_set == NULL) + return; + list = gtk_target_list_new (NULL, 0); gtk_target_list_add_uri_targets (list, 0); targets = gtk_target_table_new_from_list (list, &n_targets); - gtk_drag_source_set ( - GTK_WIDGET (view), GDK_BUTTON1_MASK, + iface->drag_source_set ( + view, GDK_BUTTON1_MASK, targets, n_targets, GDK_ACTION_COPY); gtk_target_table_free (targets, n_targets); @@ -1306,34 +1391,55 @@ e_attachment_view_drag_source_set (EAttachmentView *view) void e_attachment_view_drag_source_unset (EAttachmentView *view) { + EAttachmentViewIface *iface; + g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); - gtk_drag_source_unset (GTK_WIDGET (view)); + iface = E_ATTACHMENT_VIEW_GET_IFACE (view); + if (iface->drag_source_unset == NULL) + return; + + iface->drag_source_unset (view); } void e_attachment_view_drag_begin (EAttachmentView *view, GdkDragContext *context) { + EAttachmentViewPrivate *priv; + g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + priv = e_attachment_view_get_private (view); + /* Prevent the user from dragging and dropping to * the same attachment view, which would duplicate * the attachment. */ e_attachment_view_drag_dest_unset (view); + + g_warn_if_fail (priv->selected == NULL); + priv->selected = e_attachment_view_get_selected_attachments (view); } void e_attachment_view_drag_end (EAttachmentView *view, GdkDragContext *context) { + EAttachmentViewPrivate *priv; + g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + priv = e_attachment_view_get_private (view); + /* Restore the previous drag destination state. */ if (e_attachment_view_get_editable (view)) e_attachment_view_drag_dest_set (view); + + g_list_foreach (priv->selected, (GFunc) g_object_unref, NULL); + g_list_free (priv->selected); + priv->selected = NULL; } static void @@ -1361,8 +1467,8 @@ e_attachment_view_drag_data_get (EAttachmentView *view, guint info, guint time) { + EAttachmentViewPrivate *priv; EAttachmentStore *store; - GList *selected; struct { gchar **uris; @@ -1376,19 +1482,16 @@ e_attachment_view_drag_data_get (EAttachmentView *view, status.uris = NULL; status.done = FALSE; + priv = e_attachment_view_get_private (view); store = e_attachment_view_get_store (view); - selected = e_attachment_view_get_selected_attachments (view); - if (selected == NULL) + if (priv->selected == NULL) return; e_attachment_store_get_uris_async ( - store, selected, (GAsyncReadyCallback) + store, priv->selected, (GAsyncReadyCallback) attachment_view_got_uris_cb, &status); - g_list_foreach (selected, (GFunc) g_object_unref, NULL); - g_list_free (selected); - /* We can't return until we have results, so crank * the main loop until the callback gets triggered. */ while (!status.done) @@ -1405,19 +1508,22 @@ void e_attachment_view_drag_dest_set (EAttachmentView *view) { EAttachmentViewPrivate *priv; + EAttachmentViewIface *iface; GtkTargetEntry *targets; gint n_targets; g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); + iface = E_ATTACHMENT_VIEW_GET_IFACE (view); + if (iface->drag_dest_set == NULL) + return; + priv = e_attachment_view_get_private (view); targets = gtk_target_table_new_from_list ( priv->target_list, &n_targets); - gtk_drag_dest_set ( - GTK_WIDGET (view), GTK_DEST_DEFAULT_ALL, - targets, n_targets, priv->drag_actions); + iface->drag_dest_set (view, targets, n_targets, priv->drag_actions); gtk_target_table_free (targets, n_targets); } @@ -1425,9 +1531,15 @@ e_attachment_view_drag_dest_set (EAttachmentView *view) void e_attachment_view_drag_dest_unset (EAttachmentView *view) { + EAttachmentViewIface *iface; + g_return_if_fail (E_IS_ATTACHMENT_VIEW (view)); - gtk_drag_dest_unset (GTK_WIDGET (view)); + iface = E_ATTACHMENT_VIEW_GET_IFACE (view); + if (iface->drag_dest_unset == NULL) + return; + + iface->drag_dest_unset (view); } gboolean diff --git a/widgets/misc/e-attachment-view.h b/widgets/misc/e-attachment-view.h index 89d2d28664..071de0705a 100644 --- a/widgets/misc/e-attachment-view.h +++ b/widgets/misc/e-attachment-view.h @@ -103,6 +103,12 @@ struct _EAttachmentViewPrivate { GtkUIManager *ui_manager; guint merge_id; + /* Multi-DnD State */ + GList *event_list; + GList *selected; + gint start_x; + gint start_y; + guint editable : 1; }; @@ -139,6 +145,9 @@ gboolean e_attachment_view_button_press_event gboolean e_attachment_view_button_release_event (EAttachmentView *view, GdkEventButton *event); +gboolean e_attachment_view_motion_notify_event + (EAttachmentView *view, + GdkEventMotion *event); gboolean e_attachment_view_key_press_event (EAttachmentView *view, GdkEventKey *event); -- cgit v1.2.3 From 20fe637c8becfb356f682c1bcaf40f3790b1a9bf Mon Sep 17 00:00:00 2001 From: Vibha Yadav Date: Fri, 21 May 2010 11:12:16 +0530 Subject: Bug #531013 - Proxy login window is not in focus. Grab focus for the Proxy Login window. --- plugins/groupwise-features/proxy-login.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/groupwise-features/proxy-login.c b/plugins/groupwise-features/proxy-login.c index bf23e17d82..f85bc2b946 100644 --- a/plugins/groupwise-features/proxy-login.c +++ b/plugins/groupwise-features/proxy-login.c @@ -486,6 +486,7 @@ gw_proxy_login_cb (GtkAction *action, EShellView *shell_view) GtkTreeSelection *selection; GtkTreeModel *model = NULL; GtkTreeIter iter; + GtkWidget *tbox_account_name; gboolean is_store = FALSE; gchar *uri = NULL; proxyLoginPrivate *priv; @@ -528,6 +529,8 @@ gw_proxy_login_cb (GtkAction *action, EShellView *shell_view) ); proxy_login_setup_tree_view (); proxy_login_update_tree (); + tbox_account_name = e_builder_get_widget (priv->builder, "account_name"); + gtk_widget_grab_focus (tbox_account_name); g_signal_connect (GTK_DIALOG (priv->main), "response", G_CALLBACK(proxy_login_cb), e_shell_view_get_shell_window (shell_view)); gtk_widget_show (GTK_WIDGET (priv->main)); -- cgit v1.2.3 From 6139fb4d0b5e8f820df338be61d307b5c2782a57 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 21 May 2010 17:33:59 +0200 Subject: Bug #617557 - Quits without asking user to save unfinished messages --- composer/e-msg-composer.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index dc50fad5ad..cf10578af0 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1605,6 +1605,17 @@ msg_composer_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static gboolean +msg_composer_delete_event_cb (GtkWidget *widget, gpointer user_data) +{ + /* This is needed for the ACTION macro. */ + EMsgComposer *composer = E_MSG_COMPOSER (widget); + + gtk_action_activate (ACTION (CLOSE)); + + return FALSE; +} + static void msg_composer_constructed (GObject *object) { @@ -1643,6 +1654,9 @@ msg_composer_constructed (GObject *object) gtk_window_set_title (GTK_WINDOW (composer), _("Compose Message")); gtk_window_set_icon_name (GTK_WINDOW (composer), "mail-message-new"); + g_signal_connect (object, "delete-event", + G_CALLBACK (msg_composer_delete_event_cb), NULL); + e_shell_watch_window (shell, GTK_WINDOW (object)); /* Restore Persistent State */ @@ -1801,18 +1815,6 @@ msg_composer_map (GtkWidget *widget) gtkhtml_editor_run_command (GTKHTML_EDITOR (widget), "grab-focus"); } -static gint -msg_composer_delete_event (GtkWidget *widget, - GdkEventAny *event) -{ - /* This is needed for the ACTION macro. */ - EMsgComposer *composer = E_MSG_COMPOSER (widget); - - gtk_action_activate (ACTION (CLOSE)); - - return TRUE; -} - static gboolean msg_composer_key_press_event (GtkWidget *widget, GdkEventKey *event) @@ -2094,7 +2096,6 @@ msg_composer_class_init (EMsgComposerClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->map = msg_composer_map; - widget_class->delete_event = msg_composer_delete_event; widget_class->key_press_event = msg_composer_key_press_event; widget_class->drag_motion = msg_composer_drag_motion; widget_class->drag_data_received = msg_composer_drag_data_received; -- cgit v1.2.3 From 9fb0290d914e63512f6e3fc719b6b0249d787656 Mon Sep 17 00:00:00 2001 From: Ivar Smolin Date: Mon, 24 May 2010 19:18:47 +0300 Subject: Estonian translation updated --- po/et.po | 106 +++++++++++++++++---------------------------------------------- 1 file changed, 28 insertions(+), 78 deletions(-) diff --git a/po/et.po b/po/et.po index 4aa740385f..a5ae41f53b 100644 --- a/po/et.po +++ b/po/et.po @@ -17,8 +17,8 @@ msgstr "" "Project-Id-Version: Evolution 2.30\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=evolution\n" -"POT-Creation-Date: 2010-03-24 13:21+0000\n" -"PO-Revision-Date: 2010-05-15 10:33+0300\n" +"POT-Creation-Date: 2010-05-21 15:35+0000\n" +"PO-Revision-Date: 2010-05-24 18:51+0300\n" "Last-Translator: Ivar Smolin \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" @@ -1774,9 +1774,6 @@ msgstr "Tähtaja ületanud ülesannete värvus \"#rrggbb\" vormingus." msgid "Calendars to run alarms for" msgstr "Kalendrid, mille jaoks alarme käivitada" -msgid "Check this to use system timezone in Evolution." -msgstr "Märgi see, et kasutada Evolutionis süsteemi ajavööndit." - msgid "" "Color to draw the Marcus Bains Line in the Time bar (empty for default)." msgstr "Marcus Bainsi joone värvus ajaribal (vaikimisi tühi)." @@ -2050,18 +2047,18 @@ msgid "" "the memo list. \"0\" (Classic View) places the preview pane below the memo " "list. \"1\" (Vertical View) places the preview pane next to the memo list." msgstr "" -"Paigutusstiil määrab, kus asetseb eelvaatluspaan märkmeloendi suhtes. \"0" -"\" (klassikaline vaade) asetab eelvaatluspaani märkmeloendi alla. \"1" -"\" (vertikaalne vaade) asetab eelvaatluspaani märkmeloendi kõrvale." +"Paigutusstiil määrab, kus asetseb eelvaatluspaan märkmeloendi suhtes. " +"\"0\" (klassikaline vaade) asetab eelvaatluspaani märkmeloendi alla. " +"\"1\" (vertikaalne vaade) asetab eelvaatluspaani märkmeloendi kõrvale." msgid "" "The layout style determines where to place the preview pane in relation to " "the task list. \"0\" (Classic View) places the preview pane below the task " "list. \"1\" (Vertical View) places the preview pane next to the task list." msgstr "" -"Paigutusstiil määrab, kus asetseb eelvaatluspaan ülesandeloendi suhtes. \"0" -"\" (klassikaline vaade) asetab eelvaatluspaani ülesandeloendi alla. \"1" -"\" (vertikaalne vaade) asetab eelvaatluspaani ülesandeloendi kõrvale." +"Paigutusstiil määrab, kus asetseb eelvaatluspaan ülesandeloendi suhtes. " +"\"0\" (klassikaline vaade) asetab eelvaatluspaani ülesandeloendi alla. " +"\"1\" (vertikaalne vaade) asetab eelvaatluspaani ülesandeloendi kõrvale." msgid "The second timezone for a Day View" msgstr "Päeva vaate teine ajavöönd" @@ -2230,7 +2227,7 @@ msgid "Category" msgstr "Kategooria" msgid "Classification" -msgstr "Liigitamine" +msgstr "Liigitus" msgid "Confidential" msgstr "Salajane" @@ -2899,6 +2896,12 @@ msgstr "_Alarmid" msgid "Click here to set or unset alarms for this event" msgstr "Klõpsa siia, et seada või eemaldada selle sündmuse alarme" +msgid "Show Time as _Busy" +msgstr "Näita aega _hõivatuna" + +msgid "Toggles whether to show time as busy" +msgstr "Aja kui hõivatud aja kuvamise sisse- ja väljalülitamine" + msgid "_Recurrence" msgstr "_Kordumine" @@ -2917,12 +2920,6 @@ msgstr "Kogu _päeva kestev sündmus" msgid "Toggles whether to have All Day Event" msgstr "Kogu päeva hõlmava sündmuse sisse- ja väljalülitamine" -msgid "Show Time as _Busy" -msgstr "Näita aega _hõivatuna" - -msgid "Toggles whether to show time as busy" -msgstr "Aja kui hõivatud aja kuvamise sisse- ja väljalülitamine" - msgid "_Free/Busy" msgstr "_Vaba/hõivatud" @@ -5982,7 +5979,6 @@ msgstr "Klõpsa siia, et valida kaustad kuhu postitada" msgid "Undo the last action" msgstr "Viimase tegevuse tagasivõtmine" -#| msgid "Send Latest Information" msgid "Redo the last undone action" msgstr "Viimase tagasivõetud tegevuse uuesti sooritamine" @@ -6122,7 +6118,6 @@ msgstr "_Salvesta mustand" msgid "Run Anjal in a window" msgstr "Anjali jooksutamine aknas" -#| msgid "Mark as _default memo list" msgid "Make Anjal the default email client" msgstr "Anjali määramine vaikimisi meilikliendiks" @@ -6130,24 +6125,15 @@ msgstr "Anjali määramine vaikimisi meilikliendiks" msgid "ID of the socket to embed in" msgstr "Pesa ID, millesse kaasatakse" -#| msgid "sort" msgid "socket" msgstr "pesa" -#| msgid "Default Mail Client" msgid "Anjal email client" msgstr "Anjal meiliklient" -#, fuzzy -#| msgid "New _Task" -msgid "New Tab" -msgstr "Uus ü_lesanne" - -#| msgid "Please choose another name." msgid "Please enter your full name." msgstr "Palun sisesta enda täisnimi." -#| msgid "Using email address" msgid "Please enter your email address." msgstr "Palun sisesta enda meiliaadress." @@ -6155,41 +6141,34 @@ msgid "The email address you have entered is invalid." msgstr "Sisestatud meiliaadress ei ole korrektne." msgid "Personal details:" -msgstr "" +msgstr "Isiklikud üksikasjad:" -#| msgid "_Name:" msgid "Name:" msgstr "Nimi:" -#| msgid "Email _Address:" msgid "Email address:" msgstr "E-posti aadress:" msgid "Receiving details:" -msgstr "" +msgstr "Vastuvõtmise üksikasjad:" -#| msgid "Server _Type:" msgid "Server type:" msgstr "Serveri liik:" -#| msgid "Server Message:" msgid "Server address:" msgstr "Serveri aadress:" -#| msgid "Us_ername:" msgid "Username:" msgstr "Kasutajanimi:" -#| msgid "No encryption" msgid "Use encryption:" msgstr "Kasutatav krüptimine:" -#| msgid "Never" msgid "never" msgstr "mitte kunagi" msgid "Sending details:" -msgstr "" +msgstr "Saatmise üksikasjad:" msgid "" "To use the email application you'll need to setup an account. Put your email " @@ -6232,7 +6211,6 @@ msgstr "" msgid "Identity" msgstr "Identiteet" -#| msgid "Receiving Email" msgid "Next - Receiving mail" msgstr "Edasi - e-posti vastuvõtmine" @@ -6241,15 +6219,12 @@ msgstr "Edasi - e-posti vastuvõtmine" msgid "Receiving mail" msgstr "E-posti vastuvõtmine" -#| msgid "Sending Email" msgid "Next - Sending mail" msgstr "Edasi - kirjade saatmine" -#| msgid "Identity" msgid "Back - Identity" msgstr "Tagasi - identiteet" -#| msgid "Receiving Options" msgid "Next - Receiving options" msgstr "Edasi - vastuvõtmise valikud" @@ -6258,7 +6233,6 @@ msgstr "Edasi - vastuvõtmise valikud" msgid "Receiving options" msgstr "Vastuvõtmise valikud" -#| msgid "Receiving Email" msgid "Back - Receiving mail" msgstr "Tagasi - e-posti vastuvõtmine" @@ -6270,37 +6244,30 @@ msgstr "Kirjade saatmine" msgid "Next - Review account" msgstr "Edasi - konto ülevaatamine" -#| msgid "Defaults" msgid "Next - Defaults" msgstr "Edasi - vaikimisi" -#| msgid "Receiving Options" msgid "Back - Receiving options" msgstr "Tagasi - vastuvõtmise valikud" msgid "Defaults" msgstr "Vaikimisi" -#| msgid "Sending Email" msgid "Back - Sending mail" msgstr "Tagasi - kirjade saatmine" -#| msgid "List of accounts" msgid "Review account" msgstr "Konto ülevaatus" msgid "Finish" msgstr "Lõpeta" -#| msgid "Ascending" msgid "Back - Sending" msgstr "Tagasi - saatmine" -#| msgid "_Close" msgid "Close Tab" msgstr "Saki sulgemine" -#| msgid "Account Editor" msgid "Account Wizard" msgstr "Konto nõustaja" @@ -6309,14 +6276,6 @@ msgstr "Konto nõustaja" msgid "Evolution account assistant" msgstr "Evolutioni kontoabiline" -#| msgid "Junk Mail Settings" -msgid "Email Settings" -msgstr "E-posti sätted" - -#| msgid "Quoted" -msgid "Quit" -msgstr "Lõpeta" - #. create the local source group msgid "On This Computer" msgstr "Kohalikus arvutis" @@ -6324,14 +6283,12 @@ msgstr "Kohalikus arvutis" msgid "Modify" msgstr "Muuda" -#| msgid "Add a Column" msgid "Add a new account" msgstr "Uue konto lisamine" msgid "Account management" -msgstr "" +msgstr "Kontohaldus" -#| msgid "Junk Settings" msgid "Settings" msgstr "Sätted" @@ -6354,15 +6311,11 @@ msgstr "Grupitöövahend" msgid "Manage your email, contacts and schedule" msgstr "Oma e-posti, kontaktide ja kalendri haldamine" -#| msgid "Configuration" msgid "Configure email accounts" msgstr "E-posti kontode seadistused" -msgid "address card" -msgstr "aadressikaart" - -msgid "calendar information" -msgstr "kalendri andmed" +msgid "Email Settings" +msgstr "E-posti sätted" #. Translators: This is a cancelled activity. #, c-format @@ -7631,7 +7584,6 @@ msgstr "Sinu sõnumit vastuvõtjale %s teemal \"%s\" loeti %s." #. Translators: %s is the subject of the email message #, c-format -#| msgid "Mail Notification Properties" msgid "Delivery Notification for: \"%s\"" msgstr "Sõnumiteavitus kirjale \"%s\"" @@ -8860,9 +8812,9 @@ msgid "" "message list. \"1\" (Vertical View) places the preview pane next to the " "message list." msgstr "" -"Paigutusstiil määrab, kus asetseb eelvaatluspaan sõnumiloendi suhtes. \"0" -"\" (klassikaline vaade) asetab eelvaatluspaani sõnumiloendi alla. \"1" -"\" (vertikaalne vaade) asetab eelvaatluspaani sõnumiloendi kõrvale." +"Paigutusstiil määrab, kus asetseb eelvaatluspaan sõnumiloendi suhtes. " +"\"0\" (klassikaline vaade) asetab eelvaatluspaani sõnumiloendi alla. " +"\"1\" (vertikaalne vaade) asetab eelvaatluspaani sõnumiloendi kõrvale." msgid "The terminal font for mail display." msgstr "Terminali kirjatüüp sõnumikuvas." @@ -10598,9 +10550,9 @@ msgid "" "contact list. \"1\" (Vertical View) places the preview pane next to the " "contact list." msgstr "" -"Paigutusstiil määrab, kus asetseb eelvaatluspaan kontaktiloendi suhtes. \"0" -"\" (klassikaline vaade) asetab eelvaatluspaani kontaktiloendi alla. \"1" -"\" (vertikaalne vaade) asetab eelvaatluspaani kontaktiloendi kõrvale." +"Paigutusstiil määrab, kus asetseb eelvaatluspaan kontaktiloendi suhtes. " +"\"0\" (klassikaline vaade) asetab eelvaatluspaani kontaktiloendi alla. " +"\"1\" (vertikaalne vaade) asetab eelvaatluspaani kontaktiloendi kõrvale." msgid "" "The number of characters that must be typed before Evolution will attempt to " @@ -11302,7 +11254,7 @@ msgid "Summary contains" msgstr "Kokkuvõte sisaldab" msgid "Print this calendar" -msgstr "Kalendri printimine" +msgstr "Valitud kalendri printimine" msgid "Preview the calendar to be printed" msgstr "Prinditava kalendri eelvaatlemine" @@ -14614,7 +14566,6 @@ msgstr "Akna vaikimisi olek" msgid "Default window width" msgstr "Akna vaikimisi laius" -#| msgid "Enable search folders" msgid "Enable express mode" msgstr "Ekspressrežiimi lubamine" @@ -15314,7 +15265,6 @@ msgstr "Antud geomeetria rakendamine peaaknale" msgid "Start in online mode" msgstr "Alustamine võrgurežiimis" -#| msgid "Start in online mode" msgid "Start in \"express\" mode" msgstr "Alustamine ekspressrežiimis" -- cgit v1.2.3