Cinnamon-3.6.7/0000775000175000017500000000000013215735076012226 5ustar fabiofabioCinnamon-3.6.7/.settings/0000775000175000017500000000000013215735076014144 5ustar fabiofabioCinnamon-3.6.7/.settings/.jsdtscope0000664000175000017500000000067313215735076016151 0ustar fabiofabio Cinnamon-3.6.7/.settings/org.eclipse.cdt.ui.prefs0000664000175000017500000000022213215735076020600 0ustar fabiofabio#Fri Nov 28 14:33:30 EST 2008 eclipse.preferences.version=1 formatter_profile=org.eclipse.cdt.ui.default.gnu_profile formatter_settings_version=1 Cinnamon-3.6.7/.settings/org.eclipse.wst.jsdt.ui.prefs0000664000175000017500000000070413215735076021613 0ustar fabiofabio#Fri Nov 28 14:39:12 EST 2008 eclipse.preferences.version=1 formatter_profile=_gjs formatter_settings_version=11 org.eclipse.wst.jsdt.ui.exception.name=e org.eclipse.wst.jsdt.ui.gettersetter.use.is=true org.eclipse.wst.jsdt.ui.javadoc=false org.eclipse.wst.jsdt.ui.keywordthis=false org.eclipse.wst.jsdt.ui.overrideannotation=true org.eclipse.wst.jsdt.ui.text.custom_code_templates= Cinnamon-3.6.7/.settings/org.eclipse.wst.jsdt.ui.superType.name0000664000175000017500000000000613215735076023406 0ustar fabiofabioWindowCinnamon-3.6.7/.settings/org.eclipse.wst.jsdt.core.prefs0000664000175000017500000006466413215735076022145 0ustar fabiofabio#Fri Nov 28 14:43:43 EST 2008 eclipse.preferences.version=1 org.eclipse.wst.jsdt.core.codeComplete.argumentPrefixes= org.eclipse.wst.jsdt.core.codeComplete.argumentSuffixes= org.eclipse.wst.jsdt.core.codeComplete.fieldPrefixes= org.eclipse.wst.jsdt.core.codeComplete.fieldSuffixes= org.eclipse.wst.jsdt.core.codeComplete.localPrefixes= org.eclipse.wst.jsdt.core.codeComplete.localSuffixes= org.eclipse.wst.jsdt.core.codeComplete.staticFieldPrefixes= org.eclipse.wst.jsdt.core.codeComplete.staticFieldSuffixes= org.eclipse.wst.jsdt.core.compiler.codegen.inlineJsrBytecode=disabled org.eclipse.wst.jsdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.wst.jsdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.wst.jsdt.core.compiler.compliance=1.4 org.eclipse.wst.jsdt.core.compiler.debug.lineNumber=generate org.eclipse.wst.jsdt.core.compiler.debug.localVariable=generate org.eclipse.wst.jsdt.core.compiler.debug.sourceFile=generate org.eclipse.wst.jsdt.core.compiler.problem.assertIdentifier=warning org.eclipse.wst.jsdt.core.compiler.problem.deprecation=warning org.eclipse.wst.jsdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.wst.jsdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.wst.jsdt.core.compiler.problem.discouragedReference=warning org.eclipse.wst.jsdt.core.compiler.problem.emptyStatement=ignore org.eclipse.wst.jsdt.core.compiler.problem.enumIdentifier=warning org.eclipse.wst.jsdt.core.compiler.problem.fallthroughCase=ignore org.eclipse.wst.jsdt.core.compiler.problem.fieldHiding=ignore org.eclipse.wst.jsdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning org.eclipse.wst.jsdt.core.compiler.problem.forbiddenReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.hiddenCatchBlock=warning org.eclipse.wst.jsdt.core.compiler.problem.indirectStaticAccess=ignore org.eclipse.wst.jsdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.wst.jsdt.core.compiler.problem.looseVarDecleration=warning org.eclipse.wst.jsdt.core.compiler.problem.missingDeprecatedAnnotation=ignore org.eclipse.wst.jsdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.wst.jsdt.core.compiler.problem.nonExternalizedStringLiteral=ignore org.eclipse.wst.jsdt.core.compiler.problem.nullReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.optionalSemicolon=warning org.eclipse.wst.jsdt.core.compiler.problem.parameterAssignment=ignore org.eclipse.wst.jsdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore org.eclipse.wst.jsdt.core.compiler.problem.potentialNullReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.redundantNullCheck=ignore org.eclipse.wst.jsdt.core.compiler.problem.undefinedField=warning org.eclipse.wst.jsdt.core.compiler.problem.undocumentedEmptyBlock=ignore org.eclipse.wst.jsdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.wst.jsdt.core.compiler.problem.unresolvedFieldReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.unresolvedMethodReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.unresolvedTypeReference=ignore org.eclipse.wst.jsdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled org.eclipse.wst.jsdt.core.compiler.problem.unusedLabel=warning org.eclipse.wst.jsdt.core.compiler.problem.unusedLocal=warning org.eclipse.wst.jsdt.core.compiler.problem.unusedParameter=ignore org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled org.eclipse.wst.jsdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.wst.jsdt.core.compiler.source=1.3 org.eclipse.wst.jsdt.core.formatter.align_type_members_on_columns=false org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_enum_constant=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_method_invocation=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_assignment=0 org.eclipse.wst.jsdt.core.formatter.alignment_for_binary_expression=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_compact_if=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.wst.jsdt.core.formatter.alignment_for_enum_constants=0 org.eclipse.wst.jsdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_multiple_fields=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 org.eclipse.wst.jsdt.core.formatter.blank_lines_after_imports=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_after_package=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_field=0 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_first_class_body_declaration=0 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_imports=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_member_type=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_method=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_new_chunk=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_before_package=0 org.eclipse.wst.jsdt.core.formatter.blank_lines_between_import_groups=1 org.eclipse.wst.jsdt.core.formatter.blank_lines_between_type_declarations=0 org.eclipse.wst.jsdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_array_initializer=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_block=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_block_in_case=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_constructor_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_constant=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_method_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_objlit_initializer=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.wst.jsdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false org.eclipse.wst.jsdt.core.formatter.comment.format_block_comments=true org.eclipse.wst.jsdt.core.formatter.comment.format_header=false org.eclipse.wst.jsdt.core.formatter.comment.format_html=true org.eclipse.wst.jsdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.wst.jsdt.core.formatter.comment.format_line_comments=true org.eclipse.wst.jsdt.core.formatter.comment.format_source_code=true org.eclipse.wst.jsdt.core.formatter.comment.indent_parameter_description=true org.eclipse.wst.jsdt.core.formatter.comment.indent_root_tags=true org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_before_root_tags=insert org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_for_parameter=insert org.eclipse.wst.jsdt.core.formatter.comment.line_length=80 org.eclipse.wst.jsdt.core.formatter.compact_else_if=true org.eclipse.wst.jsdt.core.formatter.continuation_indentation=2 org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_array_initializer=2 org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_objlit_initializer=1 org.eclipse.wst.jsdt.core.formatter.format_guardian_clause_on_one_line=false org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_type_header=true org.eclipse.wst.jsdt.core.formatter.indent_breaks_compare_to_cases=true org.eclipse.wst.jsdt.core.formatter.indent_empty_lines=false org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_block=true org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_body=true org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_cases=true org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_switch=false org.eclipse.wst.jsdt.core.formatter.indentation.size=4 org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_annotation=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_comma_in_objlit_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_objlit_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_objlit_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_block=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_constant=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_method_body=insert org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_and_in_type_parameter=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_assignment_operator=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_binary_operator=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_brace_in_block=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_paren_in_cast=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_assert=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_case=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_conditional=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_for=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_annotation=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_array_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_increments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_inits=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_ellipsis=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_postfix_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_prefix_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_conditional=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_wildcard=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_semicolon_in_for=insert org.eclipse.wst.jsdt.core.formatter.insert_space_after_unary_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_and_in_type_parameter=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_assignment_operator=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_binary_operator=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_assert=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_case=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_conditional=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_default=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_for=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_annotation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_ellipsis=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_block=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_switch=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_catch=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_for=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_if=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_switch=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_while=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_postfix_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_prefix_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_conditional=insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_wildcard=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon_in_for=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_before_unary_operator=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert org.eclipse.wst.jsdt.core.formatter.keep_else_statement_on_same_line=false org.eclipse.wst.jsdt.core.formatter.keep_empty_array_initializer_on_one_line=false org.eclipse.wst.jsdt.core.formatter.keep_empty_objlit_initializer_on_one_line=false org.eclipse.wst.jsdt.core.formatter.keep_imple_if_on_one_line=false org.eclipse.wst.jsdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.wst.jsdt.core.formatter.lineSplit=80 org.eclipse.wst.jsdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.wst.jsdt.core.formatter.never_indent_line_comments_on_first_column=false org.eclipse.wst.jsdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 org.eclipse.wst.jsdt.core.formatter.number_of_empty_lines_to_preserve=1 org.eclipse.wst.jsdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.wst.jsdt.core.formatter.tabulation.char=space org.eclipse.wst.jsdt.core.formatter.tabulation.size=4 org.eclipse.wst.jsdt.core.formatter.use_tabs_only_for_leading_indentations=false org.eclipse.wst.jsdt.core.formatter.wrap_before_binary_operator=true Cinnamon-3.6.7/.settings/org.eclipse.cdt.core.prefs0000664000175000017500000002776113215735076021134 0ustar fabiofabio#Fri Nov 28 14:33:30 EST 2008 eclipse.preferences.version=1 org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16 org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line_shifted org.eclipse.cdt.core.formatter.brace_position_for_block=next_line_shifted org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line_shifted org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line_shifted org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line org.eclipse.cdt.core.formatter.compact_else_if=true org.eclipse.cdt.core.formatter.continuation_indentation=2 org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=true org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=true org.eclipse.cdt.core.formatter.indent_empty_lines=false org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false org.eclipse.cdt.core.formatter.indentation.size=8 org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=insert org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=insert org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=insert org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.cdt.core.formatter.lineSplit=80 org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.cdt.core.formatter.tabulation.char=space org.eclipse.cdt.core.formatter.tabulation.size=2 org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false Cinnamon-3.6.7/.settings/org.eclipse.wst.jsdt.ui.superType.container0000664000175000017500000000006113215735076024451 0ustar fabiofabioorg.eclipse.wst.jsdt.launching.baseBrowserLibraryCinnamon-3.6.7/restore0000775000175000017500000000014313215735076013635 0ustar fabiofabio#!/bin/bash rm -rf /usr/share/cinnamon/js mv /usr/share/cinnamon/js-backup /usr/share/cinnamon/js Cinnamon-3.6.7/COPYING0000664000175000017500000004310713215735076013266 0ustar fabiofabio GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. Cinnamon-3.6.7/debian/0000775000175000017500000000000013215735076013450 5ustar fabiofabioCinnamon-3.6.7/test0000775000175000017500000000105613215735076013135 0ustar fabiofabio#!/bin/bash sudo rm -rf /usr/share/cinnamon/js-backup sudo mv /usr/share/cinnamon/js /usr/share/cinnamon/js-backup sudo cp -R js /usr/share/cinnamon/ sudo rm -rf /usr/share/cinnamon/theme-backup sudo mv /usr/share/cinnamon/theme /usr/share/cinnamon/theme-backup sudo cp -R data/theme /usr/share/cinnamon/ sudo rm -rf /usr/lib/cinnamon-settings sudo rm -rf /usr/lib/cinnamon-menu-editor sudo cp -R files/usr / sudo cp -R files/etc / sudo cp data/org.cinnamon.gschema.xml /usr/share/glib-2.0/schemas/ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ Cinnamon-3.6.7/files/0000775000175000017500000000000013215735076013330 5ustar fabiofabioCinnamon-3.6.7/files/usr/0000775000175000017500000000000013215735076014141 5ustar fabiofabioCinnamon-3.6.7/files/usr/bin/0000775000175000017500000000000013215735076014711 5ustar fabiofabioCinnamon-3.6.7/files/usr/bin/cinnamon2d0000775000175000017500000000033513215735076016670 0ustar fabiofabio#!/bin/bash CLUTTER_PAINT=disable-clipped-redraws:disable-culling LIBGL_ALWAYS_SOFTWARE=1 CINNAMON_SOFTWARE_RENDERING=1 CINNAMON_2D=1 CINNAMON_SLOWDOWN_FACTOR=0.0001 MUFFIN_NO_SHADOWS=1 CLUTTER_DEFAULT_FPS=15 cinnamon $@ Cinnamon-3.6.7/files/usr/bin/cinnamon-session-cinnamon2d0000775000175000017500000000007313215735076022150 0ustar fabiofabio#!/bin/sh exec cinnamon-session --session cinnamon2d "$@" Cinnamon-3.6.7/files/usr/bin/cinnamon-settings-users0000775000175000017500000000026713215735076021443 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon users and groups editor utility """ import os os.system("pkexec /usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.py") Cinnamon-3.6.7/files/usr/bin/cinnamon-launcher0000775000175000017500000000372213215735076020244 0ustar fabiofabio#!/usr/bin/python3 # """ Launches or restarts cinnamon """ FALLBACK_COMMAND = "metacity" FALLBACK_ARGS = ("--replace",) import os import sys import gettext import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk gettext.install("cinnamon", "/usr/share/locale") panel_process_name = None panel_cmd = None if os.path.exists("/usr/bin/mate-panel"): panel_process_name = "mate-panel" panel_cmd = "mate-panel --replace &" elif os.path.exists("/usr/bin/gnome-panel"): panel_process_name = "gnome-panel" panel_cmd = "gnome-panel --replace &" elif os.path.exists("/usr/bin/tint2"): panel_process_name = "tint2" panel_cmd = "killall tint2; tint2 &" def confirm_restart(): d = Gtk.MessageDialog(parent=None, flags=0, message_type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.YES_NO) d.set_keep_above(True) d.set_position(Gtk.WindowPosition.CENTER_ALWAYS) d.set_markup("%s\n\n%s" % (_("Cinnamon just crashed. You are currently running in Fallback Mode."), _("Do you want to restart Cinnamon?"))) d.show_all() resp = d.run() d.destroy() return (resp == Gtk.ResponseType.YES) if __name__ == "__main__": cinnamon_pid = os.fork() if cinnamon_pid == 0: os.execvp("cinnamon", ("cinnamon", "--replace", ) + tuple(sys.argv[1:])) else: exit_status = os.waitpid(cinnamon_pid, 0)[1] if exit_status != 0: if os.fork() == 0: # Start the fallback panel if panel_cmd is not None: os.system(panel_cmd) # Start the fallback window manager os.execvp(FALLBACK_COMMAND, (FALLBACK_COMMAND,) + FALLBACK_ARGS) else: if confirm_restart(): # Kill the fallback panel os.system("killall %s" % panel_process_name) # Restart Cinnamon os.execvp(sys.argv[0], (sys.argv[0], "--replace")) Cinnamon-3.6.7/files/usr/bin/cinnamon-slideshow0000775000175000017500000000026313215735076020441 0ustar fabiofabio#!/usr/bin/python3 """ Starts a slideshow of images with the desktop background """ import os os.execvp("/usr/share/cinnamon/cinnamon-slideshow/cinnamon-slideshow.py", (" ",)) Cinnamon-3.6.7/files/usr/bin/cinnamon-preview-gtk-theme0000775000175000017500000000230013215735076021776 0ustar fabiofabio#!/usr/bin/python3 """ Preview a Cinnamon gtk theme in a small window Usage: cinnamon-preview-gtk-theme theme-name """ import sys import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk if __name__ == '__main__': import signal signal.signal(signal.SIGINT, signal.SIG_DFL) if len(sys.argv) != 2: print("Usage: cinnamon-preview-gtk-theme theme-name") exit(1) else: theme_name = sys.argv[1] settings = Gtk.Settings.get_default() settings.set_string_property("gtk-theme-name", theme_name, "gtkrc:0") window = Gtk.Window() vbox = Gtk.VBox() hbox = Gtk.HBox() button = Gtk.Button() check = Gtk.CheckButton() check.set_active(True) radio = Gtk.RadioButton() hbox.pack_start(button, False, False, 2) button.set_label("Button") hbox.pack_start(check, False, False, 2) hbox.pack_start(radio, False, False, 2) vbox.pack_start(hbox, False, False, 2) window.add(vbox) window.set_default_size(320, 200) window.set_decorated(False) window.show_all() window.connect("destroy", Gtk.main_quit) Gtk.main() Cinnamon-3.6.7/files/usr/bin/cinnamon-menu-editor0000775000175000017500000000075413215735076020675 0ustar fabiofabio#!/usr/bin/python2 """ Launch the Cinnamon menu editor utility Usage: cinnamon-menu-editor """ import sys sys.path.insert(0, '/usr/share/cinnamon/cinnamon-menu-editor') from cme import MainWindow def main(): try: from MenuEditor import config datadir = config.pkgdatadir version = config.VERSION except: datadir = '.' version = '0.9' app = MainWindow.MainWindow(datadir, version) app.run() if __name__ == '__main__': main() Cinnamon-3.6.7/files/usr/bin/cinnamon-looking-glass0000775000175000017500000000037613215735076021216 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon looking glass utility Usage: cinnamon-looking-glass {daemon|inspect} """ import os import sys os.execvp("/usr/share/cinnamon/cinnamon-looking-glass/cinnamon-looking-glass.py", (" ",) + tuple(sys.argv[1:])) Cinnamon-3.6.7/files/usr/bin/xlet-settings0000775000175000017500000000043013215735076017446 0ustar fabiofabio#!/usr/bin/python3 import os, sys if len(sys.argv) < 3: print("usage:\n xlet-settings \nor\n xlet-settings ") else: os.execvp("/usr/share/cinnamon/cinnamon-settings/xlet-settings.py", (" ",) + tuple(sys.argv[1:])) Cinnamon-3.6.7/files/usr/bin/cinnamon-json-makepot0000775000175000017500000000042613215735076021050 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon json makepot utility See cinnamon/cinnamon-json-makepot/cinnamon-json-makepot.py for usage info """ import os import sys os.execvp("/usr/share/cinnamon/cinnamon-json-makepot/cinnamon-json-makepot.py", (" ",) + tuple(sys.argv[1:])) Cinnamon-3.6.7/files/usr/bin/cinnamon-killer-daemon0000775000175000017500000000340313215735076021162 0ustar fabiofabio#!/usr/bin/python3 """ Creates a keybinding that allows cinnamon to be restarted by pressing Ctrl + Alt + Esc, and runs in the background to detect that keybinding """ import os import syslog import gi gi.require_version('Keybinder', '3.0') gi.require_version('Gtk', '3.0') from gi.repository import Keybinder from gi.repository import Gtk, Gio SETTINGS_SCHEMA = 'org.cinnamon.desktop.keybindings.media-keys' SETTINGS_KEY = 'restart-cinnamon' class KillerDaemon: def __init__(self): Keybinder.init() self.bindings = None self.settings = Gio.Settings(schema_id=SETTINGS_SCHEMA) self.apply_bindings() self.settings.connect('changed::' + SETTINGS_KEY, self.apply_bindings) def apply_bindings(self, settings=None, key=None): # Ubind the previous bindings try: if self.bindings is not None: for binding in self.bindings: Keybinder.unbind(binding) except Exception as detail: syslog.syslog(detail) # Get the new ones self.bindings = self.settings.get_strv(SETTINGS_KEY) # Bind them try: if self.bindings is not None: for binding in self.bindings: if Keybinder.bind(binding, self.restart_cinnamon, None): syslog.syslog("Bound Cinnamon restart to %s." % binding) except Exception as detail: syslog.syslog(detail) def restart_cinnamon(self, keystring, data): os.system("nemo -n &") # restart nemo if it's not running already os.system("cinnamon --replace &") # restart Cinnamon whether it's running or not (can be handy in case of a DE freeze) if __name__ == '__main__': daemon = KillerDaemon() Gtk.main() Cinnamon-3.6.7/files/usr/bin/cinnamon-subprocess-wrapper0000775000175000017500000000120213215735076022300 0ustar fabiofabio#!/usr/bin/python3 """ Runs a command and then passes the output to Cinnamon via DBus asynchronously Usage: cinnamon-subprocess-wrapper ls ~/ """ import subprocess import sys import dbus if __name__ == "__main__": process_id = int(sys.argv[1]) try: result = subprocess.check_output(sys.argv[2:]) success = True except: result = "" success = False session_bus = dbus.SessionBus() dbus = session_bus.get_object("org.Cinnamon", "/org/Cinnamon") PushSubprocessResult = dbus.get_dbus_method('PushSubprocessResult', 'org.Cinnamon') PushSubprocessResult(process_id, result, success) Cinnamon-3.6.7/files/usr/bin/cinnamon-desktop-editor0000775000175000017500000000043713215735076021400 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon desktop editor utility See cinnamon/cinnamon-desktop-editor/cinnamon-desktop-editor.py for usage info """ import os import sys os.execvp("/usr/share/cinnamon/cinnamon-desktop-editor/cinnamon-desktop-editor.py", (" ",) + tuple(sys.argv[1:])) Cinnamon-3.6.7/files/usr/bin/cinnamon-settings0000775000175000017500000000242213215735076020277 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon-settings utility, or a specific settings module Usage: cinnamon-settings [optional module name] """ import os import sys if len(sys.argv) > 1: module = sys.argv[1] if module in ("applets", "desklets", "extensions") and len(sys.argv) > 2 and sys.argv[2][0:5] != "panel": os.execvp("/usr/share/cinnamon/cinnamon-settings/xlet-settings.py", (" ", module[0:-1]) + tuple(sys.argv[2:])) if os.path.exists("/usr/share/cinnamon/cinnamon-settings/modules/cs_%s.py" % module): os.execvp("/usr/share/cinnamon/cinnamon-settings/cinnamon-settings.py", (" ",) + tuple(sys.argv[1:])) elif os.path.exists("/usr/bin/cinnamon-control-center"): os.execvp("/usr/share/cinnamon/cinnamon-settings/cinnamon-settings.py", (" ",) + tuple(sys.argv[1:])) elif os.path.exists("/usr/bin/gnome-control-center"): print ("Unknown module %s, calling gnome-control-center" % module) os.execvp("gnome-control-center", (" ",) + tuple(sys.argv[1:])) else: print ("Unknown module %s" % module) os.execvp("/usr/share/cinnamon/cinnamon-settings/cinnamon-settings.py", (" ",) + tuple(sys.argv[1:])) else: os.execvp("/usr/share/cinnamon/cinnamon-settings/cinnamon-settings.py", (" ",) + tuple(sys.argv[1:])) Cinnamon-3.6.7/files/usr/bin/cinnamon-screensaver-lock-dialog0000775000175000017500000000027213215735076023143 0ustar fabiofabio#!/usr/bin/python3 """ Launch the cinnamon screensaver lock dialog """ import os os.system("/usr/share/cinnamon/cinnamon-screensaver-lock-dialog/cinnamon-screensaver-lock-dialog.py") Cinnamon-3.6.7/files/usr/bin/cinnamon-session-cinnamon0000775000175000017500000000007113215735076021720 0ustar fabiofabio#!/bin/sh exec cinnamon-session --session cinnamon "$@" Cinnamon-3.6.7/files/usr/bin/cinnamon-file-dialog0000775000175000017500000000414013215735076020612 0ustar fabiofabio#!/usr/bin/python3 """ Allows you to open a Gtk file dialog from and get the selected file in return Used by a couple of Cinnamon spices via Javascript Usage: cinnamon-file-dialog {0|1|2} -{p|n|d|f} [path] ... """ import sys from gi.repository import Gtk cancelButton = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) typeArg = int(sys.argv[1]) fdType = typeArg % 3 if fdType == 0: msg = "Open" action = Gtk.FileChooserAction.OPEN okButton = (Gtk.STOCK_OPEN, Gtk.ResponseType.OK) elif fdType == 1: msg = "Select Folder" action = Gtk.FileChooserAction.SELECT_FOLDER okButton = (Gtk.STOCK_OPEN, Gtk.ResponseType.OK) elif fdType == 2: msg = "Save" action = Gtk.FileChooserAction.SAVE okButton = (Gtk.STOCK_SAVE, Gtk.ResponseType.OK) buttons = cancelButton + okButton filechooserdialog = Gtk.FileChooserDialog(title=msg, action=action, buttons=buttons) for i in range(2, len(sys.argv)): if sys.argv[i] == "-p": filechooserdialog.set_filename(sys.argv[i + 1]) elif sys.argv[i] == "-n": filechooserdialog.set_current_name(sys.argv[i + 1]) elif sys.argv[i] == "-d": filechooserdialog.set_current_folder(sys.argv[i + 1]) elif sys.argv[i] == "-f": filterList = sys.argv[i + 1].split(",") for filterInfo in filterList: [name, filters] = filterInfo.split(";") filterObj = Gtk.FileFilter() filterObj.set_name(name) rules = filters.split(":") for rule in rules: [ftype, value] = rule.split("=") if ftype == "m": filterObj.add_mime_type(value) elif ftype == "p": filterObj.add_pattern(value) filechooserdialog.add_filter(filterObj) if fdType == 2: filechooserdialog.set_do_overwrite_confirmation(True) if typeArg > 2: filechooserdialog.set_select_multiple(True) response = filechooserdialog.run() if response == Gtk.ResponseType.OK: if typeArg > 2: print(filechooserdialog.get_filenames()) else: print(filechooserdialog.get_filename()) filechooserdialog.destroy() Cinnamon-3.6.7/files/usr/share/0000775000175000017500000000000013215735076015243 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/applications/0000775000175000017500000000000013215735076017731 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-universal-access.desktop0000664000175000017500000004663313215735076030245 0ustar fabiofabio[Desktop Entry] Icon=cs-universal-access Exec=cinnamon-settings universal-access Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Accessibility Name[af]=Toeganklikheid Name[am]=በቀላሉ የሚደረስበት Name[ar]=تسهيل الوصول Name[ast]=Accesibilidá Name[az]=Əlçatımlılıq Name[az_AZ]=Əlçatımlılıq Name[be]=Дадатковыя магчымасці Name[be@latin]=Дадатковыя магчымасці Name[be_BY]=Дадатковыя магчымасці Name[bg]=Достъпност Name[bg_BG]=Достъпност Name[bn]=প্রবেশযোগ্যতা Name[bn_IN]=প্রবেশযোগ্যতা Name[bs]=Pristupačnost Name[ca]=Accessibilitat Name[ca@valencia]=Accessibilitat Name[ca_ES]=Accessibilitat Name[ca_ES@valencia]=Accessibilitat Name[crh]=Erişilebilirlik Name[cs]=Zpřístupnění Name[cs_CZ]=Zpřístupnění Name[csb]=Przistãpnosc Name[cy]=Hygyrchedd Name[da]=Tilgængelighed Name[da_DK]=Tilgængelighed Name[de]=Barrierefreiheit Name[de_CH]=Barrierefreiheit Name[de_DE]=Barrierefreiheit Name[el]=Προσβασιμότητα Name[eo]=Alirebleco Name[es]=Accesibilidad Name[es_AR]=Accesibilidad Name[es_CL]=Accesibilidad Name[es_CO]=Accesibilidad Name[es_CR]=Accesibilidad Name[es_DO]=Accesibilidad Name[es_EC]=Accesibilidad Name[es_ES]=Accesibilidad Name[es_MX]=Accesibilidad Name[es_NI]=Accesibilidad Name[es_PA]=Accesibilidad Name[es_PE]=Accesibilidad Name[es_PR]=Accesibilidad Name[es_SV]=Accesibilidad Name[es_UY]=Accesibilidad Name[es_VE]=Accesibilidad Name[et]=Hõlbustus Name[et_EE]=Hõlbustus Name[eu]=Erabilerraztasuna Name[fa]=دسترس‌پذیری Name[fa_AF]=دسترس‌پذیری Name[fa_IR]=دسترس‌پذیری Name[fi]=Esteettömyys Name[fi_FI]=Esteettömyys Name[fil]=Pagkarating Name[fr]=Accessibilité Name[fr_CA]=Accessibilité Name[fr_FR]=Accessibilité Name[fy]=Tagonklikens Name[ga]=Inrochtaineacht Name[gd]=Ruigsinneachd Name[gl]=Accesibilidade Name[gl_ES]=Accesibilidade Name[he]=נגישות Name[he_IL]=נגישות Name[hr]=Pristupačnost Name[hu]=Akadálymentesítés Name[hu_HU]=Akadálymentesítés Name[hy]=Մատչելիություն Name[ia]=Accessibilitate Name[id]=Aksesibilitas Name[id_ID]=Aksesibilitas Name[is]=Auðveldað aðgengi Name[it]=Accessibilità Name[it_CH]=Accessibilità Name[it_IT]=Accessibilità Name[ja]=ユーザ補助 Name[ja_JP]=ユーザ補助 Name[kab]=Tuffart Name[kk]=Қол жетерлілік Name[km]=មធ្យោបាយ​ងាយស្រួល Name[km_KH]=មធ្យោបាយ​ងាយស្រួល Name[kn]=ನಿಲುಕಣೆ (ಆಕ್ಸೆಸಿಬಿಲಿಟಿ) Name[ko]=편리한 기능 Name[ko_KR]=편리한 기능 Name[la]=Adcessibilitas Name[lo]=ການຊ່ວຍການເຂົ້າເຖິງ Name[lo_LA]=ການຊ່ວຍການເຂົ້າເຖິງ Name[lt]=Prieinamumas Name[lt_LT]=Prieinamumas Name[lv]=Pieejamība Name[lv_LV]=Pieejamība Name[ml]=ഉപയോഗലഭ്യത Name[mr]=सुलभता Name[ms]=Kebolehcapaian Name[ms_MY]=Kebolehcapaian Name[nb]=Tilgjengelighet Name[nb_NO]=Tilgjengelighet Name[nds]=Zugänglichkeit Name[ne]=पहुँचयोग्य Name[nl]=Toegankelijkheid Name[nl_NL]=Toegankelijkheid Name[nn]=Tilgjengefunksjonar Name[nn_NO]=Tilgjengefunksjonar Name[oc]=Accessibilitat Name[om]=Gahiinsa Name[pa]=ਅਸੈੱਸਬਿਲਟੀ Name[pl]=Ułatwienia dostępu Name[pl_PL]=Ułatwienia dostępu Name[pt]=Acessibilidade Name[pt_BR]=Acessibilidade Name[pt_PT]=Acessibilidade Name[ro]=Accesibilitate Name[ro_RO]=Accesibilitate Name[ru]=Специальные возможности Name[rue]=Доступ Name[sc]=Atzessibilidade Name[si]=ප්‍රවේශතාවය Name[sk]=Zjednodušenie ovládania Name[sk_SK]=Zjednodušenie ovládania Name[sl]=Dostopnost Name[sl_SI]=Dostopnost Name[so]=Sahlidda Name[sq]=Përdorshmëria Name[sr]=Приступачност Name[sr@Latn]=Pristupačnost Name[sr@ije]=Приступачност Name[sr@ijekavianlatin]=Приступачност Name[sr@latin]=Pristupačnost Name[sr_RS]=Приступачност Name[sr_RS@latin]=Pristupačnost Name[sv]=Tillgänglighet Name[ta]=அணுகல்தன்மை Name[ta_LK]=அணுகல்தன்மை Name[te]=ప్రాప్తత Name[tg]=Қобилияти дастрасӣ Name[th]=สิ่งอำนวยความสะดวก Name[th_TH]=สิ่งอำนวยความสะดวก Name[tl]=Pagkarating Name[tr]=Erişilebilirlik Name[tr_TR]=Erişilebilirlik Name[ts]=Mfikelelo Name[tt]=Алу Name[tt@iqtelif]=Алу Name[uk]=Спеціяльні можливости Name[uk_UA]=Спеціяльні можливости Name[ur]=رسائی Name[uz]=Фойдаланишга рухсат мавжудлиги Name[uz@cyrillic]=Фойдаланишга рухсат мавжудлиги Name[vi]=Khả năng Truy cập Name[vi_VN]=Khả năng Truy cập Name[zh_CN]=辅助功能 Name[zh_HK]=無障礙存取 Name[zh_TW]=無障礙 Comment=Configure accessibility features Comment[bg]=Конфигуриране на функциите за достъпност Comment[bg_BG]=Конфигуриране на функциите за достъпност Comment[ca]=Configura les funcions d'accessibilitat Comment[ca@valencia]=Configura les funcions d'accessibilitat Comment[ca_ES]=Configura les funcions d'accessibilitat Comment[ca_ES@valencia]=Configura les funcions d'accessibilitat Comment[cs]=Nastavení vlastností zpřístupnění Comment[cs_CZ]=Nastavení vlastností zpřístupnění Comment[cy]=Ffurfweddu dewisiadau hygyrchedd Comment[da]=Konfigurér tilgængelighedsfunktioner Comment[da_DK]=Konfigurér tilgængelighedsfunktioner Comment[de]=Barrierefreiheitsfunktionen konfigurieren Comment[de_CH]=Barrierefreiheitsfunktionen konfigurieren Comment[de_DE]=Barrierefreiheitsfunktionen konfigurieren Comment[el]=Προσαρμογή λειτουργιών προσβασιμότητας Comment[es]=Configurar las funciones de accesibilidad Comment[es_AR]=Configurar las funciones de accesibilidad Comment[es_CL]=Configurar las funciones de accesibilidad Comment[es_CO]=Configurar las funciones de accesibilidad Comment[es_CR]=Configurar las funciones de accesibilidad Comment[es_DO]=Configurar las funciones de accesibilidad Comment[es_EC]=Configurar las funciones de accesibilidad Comment[es_ES]=Configurar las funciones de accesibilidad Comment[es_MX]=Configurar las funciones de accesibilidad Comment[es_NI]=Configurar las funciones de accesibilidad Comment[es_PA]=Configurar las funciones de accesibilidad Comment[es_PE]=Configurar las funciones de accesibilidad Comment[es_PR]=Configurar las funciones de accesibilidad Comment[es_SV]=Configurar las funciones de accesibilidad Comment[es_UY]=Configurar las funciones de accesibilidad Comment[es_VE]=Configurar las funciones de accesibilidad Comment[eu]=Konfiguratu erabilerraztasun ezaugarriak Comment[fi]=Hallitse esteettömyysasetuksia Comment[fi_FI]=Hallitse esteettömyysasetuksia Comment[fr]=Configuration des fonctionnalités d'accessibilité Comment[fr_CA]=Configuration des fonctionnalités d'accessibilité Comment[fr_FR]=Configuration des fonctionnalités d'accessibilité Comment[hr]=Prilagodi značajke pristupaćnosti Comment[hu]=Akadálymentesítési szolgáltatások beállítása Comment[hu_HU]=Akadálymentesítési szolgáltatások beállítása Comment[ia]=Configurar le characteristicas de accessibilitate Comment[id]=Konfigurasi fitur aksesibilitas Comment[id_ID]=Konfigurasi fitur aksesibilitas Comment[is]=Stilla auðveldað aðgengi Comment[it]=Configura le caratteristiche di accessibilità Comment[it_CH]=Configura le caratteristiche di accessibilità Comment[it_IT]=Configura le caratteristiche di accessibilità Comment[kab]=Aswalo n tmesɣent n tuffart Comment[ko]=편리한 기능 설정하기 Comment[ko_KR]=편리한 기능 설정하기 Comment[lt]=Konfigūruoti prieinamumo ypatybes Comment[lt_LT]=Konfigūruoti prieinamumo ypatybes Comment[nl]=Toegankelijkheidsfuncties instellen Comment[nl_NL]=Toegankelijkheidsfuncties instellen Comment[pl]=Konfiguruj funkcje ułatwienia dostępu Comment[pl_PL]=Konfiguruj funkcje ułatwienia dostępu Comment[pt]=Configurar as funções de acessibilidade. Comment[pt_BR]=Configure recursos de acessibilidade Comment[pt_PT]=Configurar as funções de acessibilidade. Comment[ro]=Configurează caracteristicile de accesibilitate Comment[ro_RO]=Configurează caracteristicile de accesibilitate Comment[ru]=Настройка специальных возможностей Comment[sc]=Configura sas propriedades de atzessibilidade Comment[sk]=Konfigurovať funkcie zjednodušenia ovládania Comment[sk_SK]=Konfigurovať funkcie zjednodušenia ovládania Comment[sr]=Подесите функције приступачности Comment[sr@Latn]=Подесите функције приступачности Comment[sr@ije]=Подесите функције приступачности Comment[sr@ijekavianlatin]=Подесите функције приступачности Comment[sr@latin]=Подесите функције приступачности Comment[sr_RS]=Подесите функције приступачности Comment[sr_RS@latin]=Подесите функције приступачности Comment[sv]=Ställ in tillgänglighets egenskaper Comment[th]=ตั้งค่าคุณลักษณะการเข้าถึง Comment[th_TH]=ตั้งค่าคุณลักษณะการเข้าถึง Comment[tr]=Erişilebilirlik özelliklerini yapılandırın Comment[tr_TR]=Erişilebilirlik özelliklerini yapılandırın Comment[uk]=Налаштування спеціяльних можливостей Comment[uk_UA]=Налаштування спеціяльних можливостей Comment[ur]=رسائی کے فیچر تشکیل دیں Comment[zh_CN]=配置辅助功能 Comment[zh_HK]=設定無障礙存取功能 Comment[zh_TW]=調整無障礙輔助功能 Keywords=magnifier;talk;access;zoom;keys;contrast; Keywords[am]=ማጉያ : መነጋገሪያ : ፍቃድ : ማሳያ : ቁልፎች : ማነፃፅሪያ; Keywords[ar]=عدسة، تكلم، ولوج، تكبير، مفاتيح، تباين; Keywords[ast]=lente;falar;accesu;zoom;tecles;contraste; Keywords[be]=лупа;казаць;доступ;zoom;ключы;кантраснасць; Keywords[be@latin]=лупа;казаць;доступ;zoom;ключы;кантраснасць; Keywords[be_BY]=лупа;казаць;доступ;zoom;ключы;кантраснасць; Keywords[bg]=лупа;говор;достъп;мащаб;клавиши;контраст; Keywords[bg_BG]=лупа;говор;достъп;мащаб;клавиши;контраст; Keywords[bs]=povećalo;govor;pristup;zumiranje;kontrast; Keywords[ca]=lupa;veu;accés;zoom;tecles;contrast; Keywords[ca@valencia]=lupa;parlar;accés;zoom;tecles;contrast; Keywords[ca_ES]=lupa;veu;accés;zoom;tecles;contrast; Keywords[ca_ES@valencia]=lupa;parlar;accés;zoom;tecles;contrast; Keywords[cs]=lupa;mluvení;přístup;přiblížení;kontrast; Keywords[cs_CZ]=lupa;mluvení;přístup;přiblížení;kontrast; Keywords[cy]=chwyddwr;siarad;mynediad;chwyddo. allweddi;cyferbyniad; Keywords[da]=lup;tal;tilgængelighed;forstør;formindsk;taster;kontrast; Keywords[da_DK]=lup;tal;tilgængelighed;forstør;formindsk;taster;kontrast; Keywords[de]=Lupe;sprechen;Zugriff;Zoom;Vergrößern;Tasten;Kontrast; Keywords[de_CH]=Lupe;sprechen;Zugriff;Zoom;Vergrößern;Tasten;Kontrast; Keywords[de_DE]=Lupe;sprechen;Zugriff;Zoom;Vergrößern;Tasten;Kontrast; Keywords[el]=μεγεθυντής;συνομιλία;πρόσβαση;μεγέθυνση;πλήκτρα;αντίθεση; Keywords[es]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_AR]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_CL]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_CO]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_CR]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_DO]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_EC]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_ES]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_MX]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_NI]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_PA]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_PE]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_PR]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_SV]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_UY]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[es_VE]=lupa;hablar;acceso;zoom;teclas;contraste; Keywords[eu]=lupa;hitz egin;sarbidea;zooma;teklak;kontrastea; Keywords[fa]=ذره‌بین، سخن، دسترسی، زوم، کلیدها، کنتراست; Keywords[fa_AF]=ذره‌بین، سخن، دسترسی، زوم، کلیدها، کنتراست; Keywords[fa_IR]=ذره‌بین، سخن، دسترسی، زوم، کلیدها، کنتراست; Keywords[fi]=suurennuslasi;puhe;pääsy;suurennus;näppäimet;kontrasti; Keywords[fi_FI]=suurennuslasi;puhe;pääsy;suurennus;näppäimet;kontrasti; Keywords[fr]=loupe;parole;accès;zoom;touches;contraste; Keywords[fr_CA]=loupe;parler;accès;zoom;clés;contraste; Keywords[fr_FR]=loupe;parole;accès;zoom;touches;contraste; Keywords[fy]=fergrutglês;skilje;tagong;fergrutsje;kaaien;kontrast; Keywords[ga]=formhéadaitheoir;caint;rochtain;súmáil;eochracha;codarsnacht; Keywords[gd]=meudaichear;còmhradh;cothrom;sùm;iuchraichean;iomsgaradh;magnifier;talk;access;zoom;keys;contrast; Keywords[gl]=lupa;conversa;acceso;zoom;chaves;contraste; Keywords[gl_ES]=lupa;conversa;acceso;zoom;chaves;contraste; Keywords[hr]=povećalo;govor;pristup;uvećanje;tipke;kontrast; Keywords[hu]=nagyító;csevegés;hozzáférés;nagyítás;kulcsok;kontraszt; Keywords[hu_HU]=nagyító;csevegés;hozzáférés;nagyítás;kulcsok;kontraszt; Keywords[ia]=aggranditor;confabular;accesso;zoom;claves;contrasto; Keywords[id]=kaca pembesar;bicara;akses;perbesar;kunci;kontras; Keywords[id_ID]=kaca pembesar;bicara;akses;perbesar;kunci;kontras; Keywords[is]=skjástækkun;tal;aðgengi;aðdráttur;lyklar;birtuskil; Keywords[it]=lente d'ingrandimento;parlato;accesso;zoom;chiavi;contrasto; Keywords[it_CH]=lente d'ingrandimento;parlato;accesso;zoom;chiavi;contrasto; Keywords[it_IT]=lente d'ingrandimento;parlato;accesso;zoom;chiavi;contrasto; Keywords[ja]=拡大鏡、トーク、アクセス、ズーム、キー、コントラスト; Keywords[ja_JP]=拡大鏡、トーク、アクセス、ズーム、キー、コントラスト; Keywords[kab]=tlinint;awal;adduf;zoom;tiqeffalin;tamarit; Keywords[ko]=돋보기;톡;연결;줌;키;대비; Keywords[ko_KR]=돋보기;톡;연결;줌;키;대비; Keywords[lo]=magnifier;ເວົ້າ;ເຂົ້າເຖິງ;ຊູມ;keys;contrast; Keywords[lo_LA]=magnifier;ເວົ້າ;ເຂົ້າເຖິງ;ຊູມ;keys;contrast; Keywords[lt]=vaizdo didinimas;įgarsinimas;kita prieiga;mygtukai;kontrastas; Keywords[lt_LT]=vaizdo didinimas;įgarsinimas;kita prieiga;mygtukai;kontrastas; Keywords[lv]=palielinātājs;runāt;piekļuve;tālummaiņa;atslēgas;kontrasts; Keywords[lv_LV]=palielinātājs;runāt;piekļuve;tālummaiņa;atslēgas;kontrasts; Keywords[ms]=pembesar;bual;capaian;zum;kekunci;beza jelas; Keywords[ms_MY]=pembesar;bual;capaian;zum;kekunci;beza jelas; Keywords[nb]=forstørrelsesglass;snakk;tilgang;forstørr;nøkler;kontrast; Keywords[nb_NO]=forstørrelsesglass;snakk;tilgang;forstørr;nøkler;kontrast; Keywords[nds]=Lupe;sprechen;Zugang;Zoom;Tasten;Kontrast; Keywords[nl]=vergrootglas;spraak;toegang;zoomen;toetsen;contrast; Keywords[nl_NL]=vergrootglas;spraak;toegang;zoomen;toetsen;contrast; Keywords[pa]=ਮੈਗਨੀਫਾਇਰ;ਟਾੱਕ;ਅੱਕਸੈੱਸ;ਜ਼ੂਮ;ਚਾਬੀਆਂ;ਕੋਂਟਰਾਸਟ; Keywords[pl]=lupa;rozmowy;dostęp;powiększenie;klucze;kontrast; Keywords[pl_PL]=lupa;rozmowy;dostęp;powiększenie;klucze;kontrast; Keywords[pt]=amplificador;conversa;acesso;ampliação;teclas;contraste; Keywords[pt_BR]=lupa;fala;acesso;zoom;teclas;contraste; Keywords[pt_PT]=amplificador;conversa;acesso;ampliação;teclas;contraste; Keywords[ro]=lupă;conversație;acces;mărire;taste;contrast; Keywords[ro_RO]=lupă;conversație;acces;mărire;taste;contrast; Keywords[ru]=лупа;разговор;доступ;масштабирование;ключи;контрастность; Keywords[sc]=lente de ismanniadura;faeddare;atzessu;zoom;tastos;cuntrastu; Keywords[sk]=lupa;hovorenie;prístup;priblíženie;kľúče;kontrast; Keywords[sk_SK]=lupa;hovorenie;prístup;priblíženie;kľúče;kontrast; Keywords[sl]=povečevalno steklo;govor;dostop;približanje;tipke;kontrast; Keywords[sl_SI]=povečevalno steklo;govor;dostop;približanje;tipke;kontrast; Keywords[sr]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr@Latn]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr@ije]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr@ijekavianlatin]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr@latin]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr_RS]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sr_RS@latin]=лупа;говор;приступ;увеличавање;дугмад;контраст; Keywords[sv]=förstoringsglas;tal;åtkomst;zoom;nycklar;kontrast; Keywords[ta]=உருப்பெருக்கி;பேச்சு;அணுகல்;பெரிதாக்குதல்;விசைகள்;வேறுபாடு; Keywords[ta_LK]=உருப்பெருக்கி;பேச்சு;அணுகல்;பெரிதாக்குதல்;விசைகள்;வேறுபாடு; Keywords[tg]=бузургнамо;гуфтугӯ;дастрасӣ;танзими андоза;калидҳо;контраст; Keywords[th]=แว่นขยาย;เครื่องอ่านออกเสียงข้อความ;การเข้าถึง;ย่อ/ขยาย;แป้น;ความสว่าง; Keywords[th_TH]=แว่นขยาย;เครื่องอ่านออกเสียงข้อความ;การเข้าถึง;ย่อ/ขยาย;แป้น;ความสว่าง; Keywords[tr]=büyüteç;konuşma;erişim;büyütme;anahtarlar;kontrast; Keywords[tr_TR]=büyüteç;konuşma;erişim;büyütme;anahtarlar;kontrast; Keywords[uk]=лупа;розмова;доступ;масштабування;ключі;контрастність; Keywords[uk_UA]=лупа;розмова;доступ;масштабування;ключі;контрастність; Keywords[ur]=میگنی فائر، ٹاک(talk)، رسائی، زوم، کلیدیں، تناسب امتزاج(contrast); Keywords[uz]=лупа;суҳбат;рухсат бериш;масштабни ўзгартириш;калитлар;контраст; Keywords[uz@cyrillic]=лупа;суҳбат;рухсат бериш;масштабни ўзгартириш;калитлар;контраст; Keywords[vi]=kính phóng đại;nói chuyện;truy cập;thu phóng;phím;tương phản; Keywords[vi_VN]=kính phóng đại;nói chuyện;truy cập;thu phóng;phím;tương phản; Keywords[zh_CN]=magnifier;talk;access;zoom;keys;contrast;放大;语音;访问;辅助;缩放;键;联系人; Keywords[zh_HK]=magnifier;talk;access;zoom;keys;contrast;放大鏡;聊天;存取;縮放;按鍵;對比度; Keywords[zh_TW]=放大鏡;聊天;存取;縮放;按鍵;對比; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-applets.desktop0000664000175000017500000002746713215735076026452 0ustar fabiofabio[Desktop Entry] Icon=cs-applets Exec=cinnamon-settings applets Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Applets Name[af]=Toepassingtjies Name[am]=ፕሮግራሞች Name[ar]=البريمجات Name[be]=Аплеты Name[be@latin]=Аплеты Name[be_BY]=Аплеты Name[bg]=Аплети Name[bg_BG]=Аплети Name[bn]=অ্যাপলেট Name[bn_IN]=অ্যাপলেট Name[bs]=Apleti Name[ca]=Miniaplicacions Name[ca_ES]=Miniaplicacions Name[cs]=Aplety Name[cs_CZ]=Aplety Name[csb]=Apletë Name[cy]=Rhaglenigau Name[da]=Panelprogrammer Name[da_DK]=Panelprogrammer Name[el]=Μικροεφαρμογές Name[eo]=Aplikaĵetoj Name[et]=Apletid Name[et_EE]=Apletid Name[eu]=Applet-ak Name[fa]=ابزارک‌ها Name[fa_AF]=ابزارک‌ها Name[fa_IR]=ابزارک‌ها Name[fi]=Paneelisovelmat Name[fi_FI]=Paneelisovelmat Name[ga]=Feidhmchláiríní Name[gd]=Aplaidean Name[gl]=Miniaplicativos Name[gl_ES]=Miniaplicativos Name[he]=יישומונים Name[he_IL]=יישומונים Name[hi]=एप्लेट्स Name[hr]=Apleti Name[hu]=Kisalkalmazások Name[hu_HU]=Kisalkalmazások Name[id]=Applet Name[id_ID]=Applet Name[is]=Smáforrit Name[it]=Applet Name[it_CH]=Applet Name[it_IT]=Applet Name[ja]=アプレット Name[ja_JP]=アプレット Name[kab]=Tiplatin Name[km]=អាប់​ភ្លេត Name[km_KH]=អាប់​ភ្លេត Name[ko]=애플릿 Name[ko_KR]=애플릿 Name[lo]=ແອັບເພັດ Name[lo_LA]=ແອັບເພັດ Name[lt]=Įskiepiai Name[lt_LT]=Įskiepiai Name[lv]=Sīklietotnes Name[lv_LV]=Sīklietotnes Name[ml]=ആപ്‌ലെറ്റുകൾ Name[ms]=Aplet Name[ms_MY]=Aplet Name[nb]=Miniprogrammer Name[nb_NO]=Miniprogrammer Name[ne]=एप्प्लेट्स Name[nl]=Hulptoepassingen Name[nl_NL]=Hulptoepassingen Name[nn]=Småprogram Name[nn_NO]=Småprogram Name[om]=Apleetota Name[pa]=ਐਪਲਿਟ Name[pl]=Aplety Name[pl_PL]=Aplety Name[pt_BR]=Miniaplicativos Name[ro]=Appleturi Name[ro_RO]=Appleturi Name[ru]=Апплеты Name[rue]=Апплеты Name[sk]=Aplety Name[sk_SK]=Aplety Name[sl]=Apleti Name[sl_SI]=Apleti Name[so]=Kaabayaasha Name[sq]=Programthet Name[sr]=Програмчићи Name[sr@Latn]=Apleti Name[sr@ije]=Програмчићи Name[sr@ijekavianlatin]=Програмчићи Name[sr@latin]=Apleti Name[sr_RS]=Програмчићи Name[sr_RS@latin]=Apleti Name[sv]=Panelprogram Name[ta]=குறுநிரல்கள் Name[ta_LK]=குறுநிரல்கள் Name[te]=ఆప్లెట్లు Name[tg]=Барномаҳо Name[th]=แอปเพล็ต Name[th_TH]=แอปเพล็ต Name[tr]=Uygulamacıklar Name[tr_TR]=Uygulamacıklar Name[ts]=Tiphurogireme-ntsongo Name[uk]=Аплети Name[uk_UA]=Аплети Name[ur]=ایپلیٹ Name[uz]=Апплетлар Name[uz@cyrillic]=Апплетлар Name[vi]=Tiểu trình Name[vi_VN]=Tiểu trình Name[zh_CN]=小程序 Name[zh_HK]=應用小程式 Name[zh_TW]=面板小程式 Comment=Manage Cinnamon applets Comment[am]=የ ሲናሞን አፕሌቶች አስተዳዳሪ Comment[ar]=إدارة بريمجات سينامُن Comment[ast]=Alministra los applets de Cinnamon Comment[be]=Кіраванне аплетамi Cinnamon Comment[be@latin]=Кіраванне аплетамi Cinnamon Comment[be_BY]=Кіраванне аплетамi Cinnamon Comment[bg]=Управление на аплетите за Cinnamon Comment[bg_BG]=Управление на аплетите за Cinnamon Comment[bs]=Upravljaj Cinnamon apletima Comment[ca]=Gestioneu les miniaplicacions de Cinnamon Comment[ca@valencia]=Administra applets de Cinnamon Comment[ca_ES]=Gestioneu les miniaplicacions de Cinnamon Comment[ca_ES@valencia]=Administra applets de Cinnamon Comment[cs]=Správa Cinnamon appletů Comment[cs_CZ]=Správa Cinnamon appletů Comment[cy]=Rheolwch raglenigau Cinnamon Comment[da]=Administrér Cinnamon-panelprogrammer Comment[da_DK]=Administrér Cinnamon-panelprogrammer Comment[de]=Cinnamon-Applets verwalten Comment[de_CH]=Cinnamon-Applets verwalten Comment[de_DE]=Cinnamon-Applets verwalten Comment[el]=Διαχείριση μικροεφαρμογών Cinnamon Comment[es]=Administrar applets de Cinnamon Comment[es_AR]=Administrar applets de Cinnamon Comment[es_CL]=Administrar applets de Cinnamon Comment[es_CO]=Administrar applets de Cinnamon Comment[es_CR]=Administrar applets de Cinnamon Comment[es_DO]=Administrar applets de Cinnamon Comment[es_EC]=Administrar applets de Cinnamon Comment[es_ES]=Administrar applets de Cinnamon Comment[es_MX]=Administrar applets de Cinnamon Comment[es_NI]=Administrar applets de Cinnamon Comment[es_PA]=Administrar applets de Cinnamon Comment[es_PE]=Administrar applets de Cinnamon Comment[es_PR]=Administrar applets de Cinnamon Comment[es_SV]=Administrar applets de Cinnamon Comment[es_UY]=Administrar applets de Cinnamon Comment[es_VE]=Administrar applets de Cinnamon Comment[eu]=Kudeatu Cinnamon applet-ak Comment[fa]=مدیریت اپلت‌های سینمون Comment[fa_AF]=مدیریت اپلت‌های سینمون Comment[fa_IR]=مدیریت اپلت‌های سینمون Comment[fi]=Hallitse Cinnamon-sovelmia Comment[fi_FI]=Hallitse Cinnamon-sovelmia Comment[fr]=Gérer les applets de Cinnamon Comment[fr_CA]=Gérer les applets Cinnamon Comment[fr_FR]=Gérer les applets de Cinnamon Comment[fy]=Cinnamon applets beheare Comment[gd]=Stiùirich aplaidean Cinnamon Comment[gl]=Administración dos miniaplicativos de Cinnamon Comment[gl_ES]=Administración dos miniaplicativos de Cinnamon Comment[hr]=Upravljajte Cinnamon apletima Comment[hu]=Cinnamon kisalkalmazások kezelése Comment[hu_HU]=Cinnamon kisalkalmazások kezelése Comment[ia]=Administrar le applets de Cinnamon Comment[id]=Atur applets Cinnamon Comment[id_ID]=Atur applets Cinnamon Comment[is]=Sýsla með Cinnamon forritlinga Comment[it]=Gestione applet di Cinnamon Comment[it_CH]=Gestione applet di Cinnamon Comment[it_IT]=Gestione applet di Cinnamon Comment[ja]=Cinnamon アプレットの管理 Comment[ja_JP]=Cinnamon アプレットの管理 Comment[kab]=Sefrek tiplatin n Cinnamon Comment[ko]=시나몬 애플릿 관리 Comment[ko_KR]=시나몬 애플릿 관리 Comment[lo]=ຈັດການແອັບເພັດ Cinnamon Comment[lo_LA]=ຈັດການແອັບເພັດ Cinnamon Comment[lt]=Tvarkyti Cinnamon įskiepius Comment[lt_LT]=Tvarkyti Cinnamon įskiepius Comment[lv]=Pārvaldīt Cinnamon sīkrīkus Comment[lv_LV]=Pārvaldīt Cinnamon sīkrīkus Comment[ms]=Mengurus applet Cinnamon Comment[ms_MY]=Mengurus applet Cinnamon Comment[nb]=Håndter miniprogrammer i Cinnamon Comment[nb_NO]=Håndter miniprogrammer i Cinnamon Comment[nds]=Cinnamon Minianwendungen bearbeiten Comment[nl]=Hulptoepassingen van Cinnamon beheren Comment[nl_NL]=Hulptoepassingen van Cinnamon beheren Comment[oc]=Gerir los applets de Cinnamon Comment[pl]=Zarządzaj apletami Cinnamona Comment[pl_PL]=Zarządzaj apletami Cinnamona Comment[pt]=Gerir applets do Cinnamon Comment[pt_BR]=Gerenciar miniaplicativos do Cinnamon Comment[pt_PT]=Gerir applets do Cinnamon Comment[ro]=Gestionează appleturile Cinnamon Comment[ro_RO]=Gestionează appleturile Cinnamon Comment[ru]=Управление апплетами Cinnamon Comment[sc]=Manìgia applets de Cinnamon Comment[sk]=Spravovať aplety prostredia Cinnamon Comment[sk_SK]=Spravovať aplety prostredia Cinnamon Comment[sl]=Upravljajte z apleti Cinnamona Comment[sl_SI]=Upravljajte z apleti Cinnamona Comment[sq]=Menaxho programthet e Cinnamon Comment[sr]=Управљање програмчићима Цимета Comment[sr@Latn]=Управљање програмчићима Цимета Comment[sr@ije]=Управљање програмчићима Цимета Comment[sr@ijekavianlatin]=Управљање програмчићима Цимета Comment[sr@latin]=Управљање програмчићима Цимета Comment[sr_RS]=Управљање програмчићима Цимета Comment[sr_RS@latin]=Управљање програмчићима Цимета Comment[sv]=Hantera Cinnamons panelprogram Comment[tg]=Идоракунии зербарномаҳои Cinnamon Comment[th]=จัดการแอปเพล็ตต่าง ๆ ของ Cinnamon Comment[th_TH]=จัดการแอปเพล็ตต่าง ๆ ของ Cinnamon Comment[tr]=Cinnamon uygulamacıklarını yönet Comment[tr_TR]=Cinnamon uygulamacıklarını yönet Comment[uk]=Керування аплетами Cinnamon Comment[uk_UA]=Керування аплетами Cinnamon Comment[ur]=سنامون کے ایپلیٹس کا انتظام Comment[uz]=Синнамон апплетларини бошқариш Comment[uz@cyrillic]=Синнамон апплетларини бошқариш Comment[vi]=Quản lý tiểu dụng Cinnamon Comment[vi_VN]=Quản lý tiểu dụng Cinnamon Comment[zh_CN]=管理Cinnamon小程序 Comment[zh_HK]=管理 Cinnamon 應用小程式 Comment[zh_TW]=管理 Cinnamon 面板小程式 Keywords=applet; Keywords[am]=አፕሌት; Keywords[ar]=بُريْمِج; Keywords[be]=аплет; Keywords[be@latin]=аплет; Keywords[be_BY]=аплет; Keywords[bg]=аплет; Keywords[bg_BG]=аплет; Keywords[bs]=aplet; Keywords[ca]=miniaplicació; Keywords[ca_ES]=miniaplicació; Keywords[cy]=rhaglennig; Keywords[da]=panelprogram; Keywords[da_DK]=panelprogram; Keywords[de]=Applet; Keywords[de_CH]=Applet; Keywords[de_DE]=Applet; Keywords[el]=μικροεφαρμογή; Keywords[eo]=apleto; Keywords[es]=miniaplicación; Keywords[es_AR]=miniaplicación; Keywords[es_CL]=miniaplicación; Keywords[es_CO]=miniaplicación; Keywords[es_CR]=miniaplicación; Keywords[es_DO]=miniaplicación; Keywords[es_EC]=miniaplicación; Keywords[es_ES]=miniaplicación; Keywords[es_MX]=miniaplicación; Keywords[es_NI]=miniaplicación; Keywords[es_PA]=miniaplicación; Keywords[es_PE]=miniaplicación; Keywords[es_PR]=miniaplicación; Keywords[es_SV]=miniaplicación; Keywords[es_UY]=miniaplicación; Keywords[es_VE]=miniaplicación; Keywords[et]=rakend; Keywords[et_EE]=rakend; Keywords[fa]=برنامک; Keywords[fa_AF]=برنامک; Keywords[fa_IR]=برنامک; Keywords[fi]=sovelma; Keywords[fi_FI]=sovelma; Keywords[ga]=feidhmchláirín; Keywords[gd]=aplaid; Keywords[gl]=miniaplicativo; Keywords[gl_ES]=miniaplicativo; Keywords[hr]=aplet; Keywords[hu]=kisalkalmazás; Keywords[hu_HU]=kisalkalmazás; Keywords[id]=aplet; Keywords[id_ID]=aplet; Keywords[is]=smáforrit; Keywords[ja]=アプレット; Keywords[ja_JP]=アプレット; Keywords[kab]=Taplet; Keywords[ko]=애플릿; Keywords[ko_KR]=애플릿; Keywords[lo]=ແອັບເພັດ; Keywords[lo_LA]=ແອັບເພັດ; Keywords[lt]=įskiepis; Keywords[lt_LT]=įskiepis; Keywords[lv]=sīkrīks; Keywords[lv_LV]=sīkrīks; Keywords[ms]=aplet; Keywords[ms_MY]=aplet; Keywords[nb]=miniprogram; Keywords[nb_NO]=miniprogram; Keywords[nds]=Minianwendung / Applet; Keywords[nl]=hulptoepassing; Keywords[nl_NL]=hulptoepassing; Keywords[pa]=ਐਪਲਿਟ; Keywords[pl]=aplet; Keywords[pl_PL]=aplet; Keywords[pt_BR]=miniaplicativo; Keywords[ru]=апплет; Keywords[sk]=aplet; Keywords[sk_SK]=aplet; Keywords[sl]=aplet; Keywords[sl_SI]=aplet; Keywords[sq]=programth; Keywords[sr]=програмче; Keywords[sr@Latn]=програмче; Keywords[sr@ije]=програмче; Keywords[sr@ijekavianlatin]=програмче; Keywords[sr@latin]=програмче; Keywords[sr_RS]=програмче; Keywords[sr_RS@latin]=програмче; Keywords[ta]=குறுநிரல்; Keywords[ta_LK]=குறுநிரல்; Keywords[tg]=зербарнома; Keywords[th]=แอปเพล็ต; Keywords[th_TH]=แอปเพล็ต; Keywords[tr]=uygulamacık; Keywords[tr_TR]=uygulamacık; Keywords[uk]=аплет; Keywords[uk_UA]=аплет; Keywords[ur]=ایپلیٹ; Keywords[uz]=апплет; Keywords[uz@cyrillic]=апплет; Keywords[vi]=tiểu trình; Keywords[vi_VN]=tiểu trình; Keywords[zh_CN]=小程序; Keywords[zh_HK]=應用小程式; Keywords[zh_TW]=面板小程式; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-sound.desktop0000664000175000017500000002530613215735076026120 0ustar fabiofabio[Desktop Entry] Icon=cs-sound Exec=cinnamon-settings sound Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Sound Name[am]=ድምጽ Name[ar]=الصوت Name[ast]=Soníu Name[be]=Гук Name[be@latin]=Гук Name[be_BY]=Гук Name[bg]=Звук Name[bg_BG]=Звук Name[bs]=Zvuk Name[ca]=Àudio Name[ca@valencia]=So Name[ca_ES]=Àudio Name[ca_ES@valencia]=So Name[cs]=Zvuk Name[cs_CZ]=Zvuk Name[cy]=Sain Name[da]=Lyd Name[da_DK]=Lyd Name[de]=Klang Name[de_CH]=Klang Name[de_DE]=Klang Name[el]=Ήχος Name[eo]=Sono Name[es]=Sonido Name[es_AR]=Sonido Name[es_CL]=Sonido Name[es_CO]=Sonido Name[es_CR]=Sonido Name[es_DO]=Sonido Name[es_EC]=Sonido Name[es_ES]=Sonido Name[es_MX]=Sonido Name[es_NI]=Sonido Name[es_PA]=Sonido Name[es_PE]=Sonido Name[es_PR]=Sonido Name[es_SV]=Sonido Name[es_UY]=Sonido Name[es_VE]=Sonido Name[et]=Heli Name[et_EE]=Heli Name[eu]=Soinua Name[fa]=صدا Name[fa_AF]=صدا Name[fa_IR]=صدا Name[fi]=Ääni Name[fi_FI]=Ääni Name[fr]=Son Name[fr_CA]=Son Name[fr_FR]=Son Name[fy]=Lûd Name[ga]=Fuaim Name[gd]=Fuaim Name[gl]=Son Name[gl_ES]=Son Name[he]=שמע Name[he_IL]=שמע Name[hr]=Zvuk Name[hu]=Hang Name[hu_HU]=Hang Name[hy]=Ձայն Name[ia]=Sono Name[id]=Suara Name[id_ID]=Suara Name[is]=Hljóð Name[it]=Audio Name[it_CH]=Audio Name[it_IT]=Audio Name[ja]=サウンド Name[ja_JP]=サウンド Name[kk]=Дыбыс Name[ko]=소리 Name[ko_KR]=소리 Name[lo]=ສຽງ Name[lo_LA]=ສຽງ Name[lt]=Garsas Name[lt_LT]=Garsas Name[lv]=Skaņa Name[lv_LV]=Skaņa Name[ms]=Bunyi Name[ms_MY]=Bunyi Name[nb]=Lyd Name[nb_NO]=Lyd Name[nds]=Klang Name[nl]=Geluid Name[nl_NL]=Geluid Name[oc]=Son Name[pa]=ਆਵਾਜ਼ Name[pl]=Dźwięk Name[pl_PL]=Dźwięk Name[pt]=Som Name[pt_BR]=Som Name[pt_PT]=Som Name[ro]=Sunet Name[ro_RO]=Sunet Name[ru]=Звук Name[sk]=Zvuk Name[sk_SK]=Zvuk Name[sl]=Zvok Name[sl_SI]=Zvok Name[sq]=Zëri Name[sr]=Звук Name[sr@Latn]=Звук Name[sr@ije]=Звук Name[sr@ijekavianlatin]=Звук Name[sr@latin]=Звук Name[sr_RS]=Звук Name[sr_RS@latin]=Звук Name[sv]=Ljud Name[ta]=ஒலி Name[ta_LK]=ஒலி Name[tg]=Садо Name[th]=เสียง Name[th_TH]=เสียง Name[tr]=Ses Name[tr_TR]=Ses Name[uk]=Звук Name[uk_UA]=Звук Name[ur]=آواز Name[uz]=Товуш Name[uz@cyrillic]=Товуш Name[vi]=Âm thanh Name[vi_VN]=Âm thanh Name[zh_CN]=声音 Name[zh_HK]=聲音 Name[zh_TW]=音效 Comment=Manage sound settings Comment[am]=የ ድምፅ ማሰናጃ አስተዳዳሪ Comment[bg]=Управление настройките на звука Comment[bg_BG]=Управление настройките на звука Comment[ca]=Gestioneu els ajusts del so Comment[ca@valencia]=Gestioneu els ajusts del so Comment[ca_ES]=Gestioneu els ajusts del so Comment[ca_ES@valencia]=Gestioneu els ajusts del so Comment[cs]=Spravovat nastavení zvuku Comment[cs_CZ]=Spravovat nastavení zvuku Comment[cy]=Rheoli'r gosodiadau sain Comment[da]=Håndtér lydindstillinger Comment[da_DK]=Håndtér lydindstillinger Comment[de]=Klangeinstellungen verwalten Comment[de_CH]=Klangeinstellungen verwalten Comment[de_DE]=Klangeinstellungen verwalten Comment[el]=Διαχείριση ρυθμίσεων ήχου Comment[es]=Gestionar opciones de sonido Comment[es_AR]=Gestionar opciones de sonido Comment[es_CL]=Gestionar opciones de sonido Comment[es_CO]=Gestionar opciones de sonido Comment[es_CR]=Gestionar opciones de sonido Comment[es_DO]=Gestionar opciones de sonido Comment[es_EC]=Gestionar opciones de sonido Comment[es_ES]=Gestionar opciones de sonido Comment[es_MX]=Gestionar opciones de sonido Comment[es_NI]=Gestionar opciones de sonido Comment[es_PA]=Gestionar opciones de sonido Comment[es_PE]=Gestionar opciones de sonido Comment[es_PR]=Gestionar opciones de sonido Comment[es_SV]=Gestionar opciones de sonido Comment[es_UY]=Gestionar opciones de sonido Comment[es_VE]=Gestionar opciones de sonido Comment[eu]=Kudeatu soinuaren ezarpenak Comment[fi]=Ääniasetusten hallinta Comment[fi_FI]=Ääniasetusten hallinta Comment[fr]=Gérer les paramètres audio Comment[fr_CA]=Gérer les paramètres audio Comment[fr_FR]=Gérer les paramètres audio Comment[hr]=Upravljanje postvkama zvuka Comment[hu]=Hangbeállítások Comment[hu_HU]=Hangbeállítások Comment[ia]=Gerer le configurationes del sono Comment[is]=Sýsla með hljóðstillingar Comment[it]=Regolare le configurazioni del suono Comment[it_CH]=Regolare le configurazioni del suono Comment[it_IT]=Regolare le configurazioni del suono Comment[ko]=소리 설정 관리 Comment[ko_KR]=소리 설정 관리 Comment[lt]=Tvarkyti garso nustatymus Comment[lt_LT]=Tvarkyti garso nustatymus Comment[nl]=Geluidinstellingen beheren Comment[nl_NL]=Geluidinstellingen beheren Comment[pl]=Zarządzaj ustawieniami dźwięku Comment[pl_PL]=Zarządzaj ustawieniami dźwięku Comment[pt]=Gerir definições de som Comment[pt_BR]=Gerenciar configuração de áudio Comment[pt_PT]=Gerir definições de som Comment[ro]=Gestionează setările de sunet Comment[ro_RO]=Gestionează setările de sunet Comment[ru]=Управление настройками звука Comment[sk]=Spravovať nastavenia zvuku Comment[sk_SK]=Spravovať nastavenia zvuku Comment[sr]=Управљајте подешавањима звука Comment[sr@Latn]=Управљајте подешавањима звука Comment[sr@ije]=Управљајте подешавањима звука Comment[sr@ijekavianlatin]=Управљајте подешавањима звука Comment[sr@latin]=Управљајте подешавањима звука Comment[sr_RS]=Управљајте подешавањима звука Comment[sr_RS@latin]=Управљајте подешавањима звука Comment[sv]=Hantera ljudinställningar Comment[tr]=Ses ayarlarını yönet Comment[tr_TR]=Ses ayarlarını yönet Comment[uk]=Керування налаштуваннями звуку Comment[uk_UA]=Керування налаштуваннями звуку Comment[ur]=آواز کی ترتیبات انتظام Comment[zh_CN]=管理声音设置 Comment[zh_HK]=管理聲音設定 Comment[zh_TW]=管理音效設定 Keywords=sound;media;music;speakers;audio; Keywords[am]=ድምፅ: መገናኛ: ሙዚቃ: ስፒከር: ድምፅ; Keywords[bg]=звук;медия;музика;говорители;аудио; Keywords[bg_BG]=звук;медия;музика;говорители;аудио; Keywords[ca]=so;mitjans;música;altaveus;àudio; Keywords[ca@valencia]=so;mitjans;música;altaveus;àudio; Keywords[ca_ES]=so;mitjans;música;altaveus;àudio; Keywords[ca_ES@valencia]=so;mitjans;música;altaveus;àudio; Keywords[cs]=zvuk;média;hudba;reproduktory;audio; Keywords[cs_CZ]=zvuk;média;hudba;reproduktory;audio; Keywords[cy]=sain;cyfrwng;cerddoriaeth;uchelseinyddion;sain; Keywords[da]=lyd;medier;musik;højtalere;audio; Keywords[da_DK]=lyd;medier;musik;højtalere;audio; Keywords[de]=Klang;Sound;Audio;Ton;Medien;Musik;Lautsprecher; Keywords[de_CH]=Klang;Sound;Audio;Ton;Medien;Musik;Lautsprecher; Keywords[de_DE]=Klang;Sound;Audio;Ton;Medien;Musik;Lautsprecher; Keywords[el]=ήχος;πολυμέσα;μουσική;ηχεία; Keywords[es]=sonido;medios;música;altavoces;audio; Keywords[es_AR]=sonido;medios;música;altavoces;audio; Keywords[es_CL]=sonido;medios;música;altavoces;audio; Keywords[es_CO]=sonido;medios;música;altavoces;audio; Keywords[es_CR]=sonido;medios;música;altavoces;audio; Keywords[es_DO]=sonido;medios;música;altavoces;audio; Keywords[es_EC]=sonido;medios;música;altavoces;audio; Keywords[es_ES]=sonido;medios;música;altavoces;audio; Keywords[es_MX]=sonido;medios;música;altavoces;audio; Keywords[es_NI]=sonido;medios;música;altavoces;audio; Keywords[es_PA]=sonido;medios;música;altavoces;audio; Keywords[es_PE]=sonido;medios;música;altavoces;audio; Keywords[es_PR]=sonido;medios;música;altavoces;audio; Keywords[es_SV]=sonido;medios;música;altavoces;audio; Keywords[es_UY]=sonido;medios;música;altavoces;audio; Keywords[es_VE]=sonido;medios;música;altavoces;audio; Keywords[eu]=soinua;multimedia;musika;bozgorailuak;audioa; Keywords[fi]=ääni;äänentoisto;media;musiikki;kaiutin;kaiuttimet;kuulokkeet;audio;sound;music;speakers; Keywords[fi_FI]=ääni;äänentoisto;media;musiikki;kaiutin;kaiuttimet;kuulokkeet;audio;sound;music;speakers; Keywords[fr]=son;média;musique;haut-parleurs;audio; Keywords[fr_CA]=son;média;musique;haut-parleurs;audio; Keywords[fr_FR]=son;média;musique;haut-parleurs;audio; Keywords[hr]=zvuk;medij;glazba;zvučnici;ton; Keywords[hu]=sound;media;music;speakers;audio;hang;média;zene;hangszórók; Keywords[hu_HU]=sound;media;music;speakers;audio;hang;média;zene;hangszórók; Keywords[ia]=sono;medios;musica;altoparlatores;audio; Keywords[is]=hljóð;margmiðlun;tónlist;hátalarar;hljóðkerfi; Keywords[it]=suono;media;musica;altoparlanti;audio; Keywords[it_CH]=suono;media;musica;altoparlanti;audio; Keywords[it_IT]=suono;media;musica;altoparlanti;audio; Keywords[ko]=소리;미디어;음악;스피커;오디오; Keywords[ko_KR]=소리;미디어;음악;스피커;오디오; Keywords[lt]=garsas;medija;muzika;garsiakalbiai;audio; Keywords[lt_LT]=garsas;medija;muzika;garsiakalbiai;audio; Keywords[nl]=geluid;media;muziek;luidsprekers;audio; Keywords[nl_NL]=geluid;media;muziek;luidsprekers;audio; Keywords[pl]=dźwięk;media;muzyka;głośniki;audio; Keywords[pl_PL]=dźwięk;media;muzyka;głośniki;audio; Keywords[pt]=som;media;música;altifalantes;áudio; Keywords[pt_BR]=som;mídia;música;alto-falantes;áudio; Keywords[pt_PT]=som;media;música;altifalantes;áudio; Keywords[ro]=sunet;media;muzică;boxe;audio; Keywords[ro_RO]=sunet;media;muzică;boxe;audio; Keywords[ru]=звук;медиа;музыка;колонки;аудио; Keywords[sk]=zvuk;médiá;hudba;reproduktory;audio; Keywords[sk_SK]=zvuk;médiá;hudba;reproduktory;audio; Keywords[sr]=звук;музика;звучници;аудио; Keywords[sr@Latn]=звук;музика;звучници;аудио; Keywords[sr@ije]=звук;музика;звучници;аудио; Keywords[sr@ijekavianlatin]=звук;музика;звучници;аудио; Keywords[sr@latin]=звук;музика;звучници;аудио; Keywords[sr_RS]=звук;музика;звучници;аудио; Keywords[sr_RS@latin]=звук;музика;звучници;аудио; Keywords[sv]=ljud;media;musik;högtalare;ljud; Keywords[tr]=ses;ortam;müzik;hoparlör;çalma; Keywords[tr_TR]=ses;ortam;müzik;hoparlör;çalma; Keywords[uk]=звук;медія;музика;гучномовці;аудіо; Keywords[uk_UA]=звук;медія;музика;гучномовці;аудіо; Keywords[ur]=آواز، ساؤنڈ، میڈیا، سپیکر، آڈیو، موسیقی; Keywords[zh_CN]=声音、多媒体、音乐、扬声器、音频; Keywords[zh_HK]=sound;media;music;speakers;audio;聲音;媒體;音樂;喇叭;音訊; Keywords[zh_TW]=音效、媒體、音樂、揚聲器、音訊; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-onscreen-keyboard.desktop0000664000175000017500000002517313215735076026546 0ustar fabiofabio[Desktop Entry] Exec=dbus-send --print-reply --dest=org.Cinnamon /org/Cinnamon org.Cinnamon.ToggleKeyboard Icon=keyboard Terminal=false Type=Application Categories=Utility; OnlyShowIn=X-Cinnamon; Keywords=onboard;keyboard;caribou; Name=Virtual keyboard Name[am]=የሚታይ የ ፊደል ገበታ Name[bg]=Виртуална клавиатура Name[bg_BG]=Виртуална клавиатура Name[ca]=Teclat virtual Name[ca@valencia]=Teclat virtual Name[ca_ES]=Teclat virtual Name[ca_ES@valencia]=Teclat virtual Name[cs]=Virtuální klávesnice Name[cs_CZ]=Virtuální klávesnice Name[cy]=Rhith fysellfwrdd Name[da]=Virtuelt tastatur Name[da_DK]=Virtuelt tastatur Name[de]=Bildschirmtastatur Name[de@hebrew]=Bildschirmtastatur Name[de_CH]=Bildschirmtastatur Name[de_DE]=Bildschirmtastatur Name[el]=Εικονικό πληκτρολόγιο Name[es]=Teclado virtual Name[es_419]=Teclado virtual Name[es_AR]=Teclado virtual Name[es_CL]=Teclado virtual Name[es_CO]=Teclado virtual Name[es_CR]=Teclado virtual Name[es_DO]=Teclado virtual Name[es_EC]=Teclado virtual Name[es_ES]=Teclado virtual Name[es_MX]=Teclado virtual Name[es_NI]=Teclado virtual Name[es_PA]=Teclado virtual Name[es_PE]=Teclado virtual Name[es_PR]=Teclado virtual Name[es_SV]=Teclado virtual Name[es_US]=Teclado virtual Name[es_UY]=Teclado virtual Name[es_VE]=Teclado virtual Name[et]=Virtuaalne klaviatuur Name[eu]=Teklatu birtuala Name[fi]=Virtuaalinäppäimistö Name[fi_FI]=Virtuaalinäppäimistö Name[fr]=Clavier virtuel Name[fr_CA]=Clavier virtuel Name[fr_FR]=Clavier virtuel Name[hr]=Virtualna tipkovnica Name[hu]=Virtuális billentyűzet Name[hu_HU]=Virtuális billentyűzet Name[ia]=Claviero virtual Name[id]=Keyboard virtual Name[id_ID]=Keyboard virtual Name[is]=Sýndarlyklaborð Name[it]=Tastiera virtuale Name[kab]=Anasiw aḥlis Name[ko]=가상 키보드 Name[ko_KR]=가상 키보드 Name[lt]=Virtuali klaviatūra Name[lt_LT]=Virtuali klaviatūra Name[nap]=Tastiera faveza Name[nb]=Virtuelt tastatur Name[nb_NO]=Virtuelt tastatur Name[nl]=Virtueel toetsenbord Name[nl_NL]=Virtueel toetsenbord Name[pl]=Klawiatura wirtualna Name[pl_PL]=Klawiatura wirtualna Name[pt]=Teclado virtual Name[pt_BR]=Teclado virtual Name[pt_PT]=Teclado virtual Name[ro]=Tastatură virtuală Name[ro_RO]=Tastatură virtuală Name[ru]=Виртуальная клавиатура Name[sc]=Tastiera virtuale Name[sk]=Virtuálna klávesnica Name[sk_SK]=Virtuálna klávesnica Name[sq]=Tastiera virtuale Name[sr]=Виртуелна тастатура Name[sr@Latn]=Виртуелна тастатура Name[sr@ije]=Виртуелна тастатура Name[sr@ijekavianlatin]=Виртуелна тастатура Name[sr@latin]=Виртуелна тастатура Name[sr_RS]=Виртуелна тастатура Name[sr_RS@latin]=Виртуелна тастатура Name[sv]=Virtuellt tangentbord Name[ta]=திரைப்பலகை Name[ta_LK]=திரைப்பலகை Name[th]=แป้นพิมพ์เสมือนจริง Name[th_TH]=แป้นพิมพ์เสมือนจริง Name[tr]=Sanal klavye Name[tr_TR]=Sanal klavye Name[uk]=Віртуальна клавіатура Name[uk_UA]=Віртуальна клавіатура Name[ur]=ورچول کیی بورڈ Name[ur_PK]=ورچول کیی بورڈ Name[uz]=Виртуал клавиатура Name[uz@Latn]=Виртуал клавиатура Name[uz@cyrillic]=Виртуал клавиатура Name[zh_CN]=虚拟键盘 Name[zh_HK]=虛擬鍵盤 Name[zh_TW]=虛擬鍵盤 Comment=Turn on-screen keyboard on or off Comment[am]=የመመልከቻውን ፊደል ገበታ ማብሪያ ወይንም ማጥፊያ Comment[ar]=شغّل أو عطّل لوحة مفاتيح الشاشة Comment[ar_MA]=شغّل أو عطّل لوحة مفاتيح الشاشة Comment[ast]=Prender o apagar la pantalla del tecláu Comment[be]=Уключыць/выключыць экранную клавіятуру Comment[be@latin]=Уключыць/выключыць экранную клавіятуру Comment[be_BY]=Уключыць/выключыць экранную клавіятуру Comment[bg]=Включване или изключване на екранната клавиатура Comment[bg_BG]=Включване или изключване на екранната клавиатура Comment[bs]=Uključi/isključi ekransku tastaturu Comment[ca]=Activa o desactiva el teclat a la pantalla Comment[ca@valencia]=Activa o desactiva el teclat en pantalla Comment[ca_ES]=Activa o desactiva el teclat a la pantalla Comment[ca_ES@valencia]=Activa o desactiva el teclat en pantalla Comment[cs]=Zapnout nebo vypnout klávesnici na obrazovce Comment[cs_CZ]=Zapnout nebo vypnout klávesnici na obrazovce Comment[cy]=Cychwyn neu ddiffodd y bysellfwrdd ar sgrin Comment[da]=Slå skærmtastatur til/fra Comment[da_DK]=Slå skærmtastatur til/fra Comment[de]=Bildschirmtastatur ein-/ausschalten Comment[de@hebrew]=Bildschirmtastatur ein-/ausschalten Comment[de_CH]=Bildschirmtastatur ein-/ausschalten Comment[de_DE]=Bildschirmtastatur ein-/ausschalten Comment[el]=Εναλλαγή λειτουργίας πληκτρολογίου οθόνης Comment[eo]=En- aŭ elŝalti la ekranklavaron Comment[es]=Activar o no el teclado en pantalla Comment[es_419]=Activar o no el teclado en pantalla Comment[es_AR]=Activar o no el teclado en pantalla Comment[es_CL]=Activar o no el teclado en pantalla Comment[es_CO]=Activar o no el teclado en pantalla Comment[es_CR]=Activar o no el teclado en pantalla Comment[es_DO]=Activar o no el teclado en pantalla Comment[es_EC]=Activar o no el teclado en pantalla Comment[es_ES]=Activar o no el teclado en pantalla Comment[es_MX]=Activar o no el teclado en pantalla Comment[es_NI]=Activar o no el teclado en pantalla Comment[es_PA]=Activar o no el teclado en pantalla Comment[es_PE]=Activar o no el teclado en pantalla Comment[es_PR]=Activar o no el teclado en pantalla Comment[es_SV]=Activar o no el teclado en pantalla Comment[es_US]=Activar o no el teclado en pantalla Comment[es_UY]=Activar o no el teclado en pantalla Comment[es_VE]=Activar o no el teclado en pantalla Comment[et]=Ekraaniklaviatuuri sisse või välja lülitamine Comment[eu]=Aktibatu edo desaktibatu pantailako teklatua Comment[fi]=Näyttönäppäimistö päälle/pois Comment[fi_FI]=Näyttönäppäimistö päälle/pois Comment[fr]=Activer ou désactiver le clavier visuel Comment[fr_CA]=Activer ou désactiver le clavier visuel Comment[fr_FR]=Activer ou désactiver le clavier visuel Comment[ga]=Cas air nó as méarchlár scáileáin Comment[gd]=Cuir am meur-chlàr air an sgrìn air no dheth Comment[gl]=Activar ou desactivar o teclado en pantalla Comment[gl_ES]=Activar ou desactivar o teclado en pantalla Comment[hr]=Uključi/Isključi zaslonsku tipkovnicu Comment[hu]=Képernyő-billentyűzet be- vagy kikapcsolása Comment[hu_HU]=Képernyő-billentyűzet be- vagy kikapcsolása Comment[ia]=Activar o stoppar le claviero sur-le-schermo Comment[id]=Menyalakan atau mematikan papan tik di layar Comment[id_ID]=Menyalakan atau mematikan papan tik di layar Comment[is]=Skjályklaborð af eða á Comment[it]=Attiva o disattiva la tastiera sullo schermo Comment[kab]=Rmed neɣ ssens anasiw amwalan Comment[ko]=화상 키보드 켜고 끄기 Comment[ko_KR]=화상 키보드 켜고 끄기 Comment[lt]=Įjungti arba išjungti ekraninę klaviatūrą Comment[lt_LT]=Įjungti arba išjungti ekraninę klaviatūrą Comment[lv]=Ieslēgt vai izslēgt ekrāna tastatūru Comment[lv_LV]=Ieslēgt vai izslēgt ekrāna tastatūru Comment[ms]=Hidup atau matikan papan kekunci skrin Comment[ms_MY]=Hidup atau matikan papan kekunci skrin Comment[nb]=Slå av/på skjermtastatur Comment[nb_NO]=Slå av/på skjermtastatur Comment[nds]=Bildschirmtastatur ein- oder ausschalten Comment[nl]=Schermtoetsenbord in- of uitschakelen Comment[nl_NL]=Schermtoetsenbord in- of uitschakelen Comment[oc]=Activar o desactivar lo clavièr visual Comment[om]=Furtuu gabatee argiirratii bantuufi cuftuu Comment[pa]=ਆਨ-ਸਕਰੀਨ ਕੀਬੋਰਡ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ Comment[pl]=Włącz/Wyłącz klawiaturę ekranową Comment[pl_PL]=Włącz/Wyłącz klawiaturę ekranową Comment[pt]=Ativar ou desativar teclado no ecrã Comment[pt_BR]=Ativar ou desativar o teclado virtual Comment[pt_PT]=Ativar ou desativar teclado no ecrã Comment[ro]=Activează sau dezactivează tastatura pe ecran Comment[ro_RO]=Activează sau dezactivează tastatura pe ecran Comment[ru]=Включить или выключить экранную клавиатуру Comment[sk]=Zapnúť alebo vypnúť klávesnicu na obrazovke Comment[sk_SK]=Zapnúť alebo vypnúť klávesnicu na obrazovke Comment[sl]=Omogoči ali onemogoči zaslonsko tipkovnico Comment[sl_SI]=Omogoči ali onemogoči zaslonsko tipkovnico Comment[sq]=Aktivizo ose çaktivizo tastierën në ekran Comment[sr]=Укључи/искључи тастатуру на екрану Comment[sr@Latn]=Укључи/искључи тастатуру на екрану Comment[sr@ije]=Укључи/искључи тастатуру на екрану Comment[sr@ijekavianlatin]=Укључи/искључи тастатуру на екрану Comment[sr@latin]=Укључи/искључи тастатуру на екрану Comment[sr_RS]=Укључи/искључи тастатуру на екрану Comment[sr_RS@latin]=Укључи/искључи тастатуру на екрану Comment[sv]=Aktivera eller inaktivera skärmtangentbord Comment[ta]=திரைப்பலகை ஆன் அல்லது ஆஃப் செய் Comment[ta_LK]=திரைப்பலகை ஆன் அல்லது ஆஃப் செய் Comment[tg]=Хомӯш ё фаъол кардани клавиатураи экранӣ Comment[th]=เปิดหรือปิดแป้นพิมพ์บนจอ Comment[th_TH]=เปิดหรือปิดแป้นพิมพ์บนจอ Comment[tr]=Ekran klavyesini aç ya da kapat Comment[tr_TR]=Ekran klavyesini aç ya da kapat Comment[uk]=Увімкнути або вимкнути екранну набірницю Comment[uk_UA]=Увімкнути або вимкнути екранну набірницю Comment[ur]=سکرین کیبورڈ چالو یا بند کریں Comment[ur_PK]=سکرین کیبورڈ چالو یا بند کریں Comment[uz]=Экран клавиатурасини ёқиш ёки ўчириш Comment[uz@Latn]=Экран клавиатурасини ёқиш ёки ўчириш Comment[uz@cyrillic]=Экран клавиатурасини ёқиш ёки ўчириш Comment[vi]=Bật tắt bàn phím màn hình Comment[vi_VN]=Bật tắt bàn phím màn hình Comment[zh_CN]=开关屏幕键盘 Comment[zh_HK]=開啟或關閉熒幕鍵盤 Comment[zh_TW]=開啟或關閉螢幕鍵盤 Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-workspaces.desktop0000664000175000017500000004075213215735076027153 0ustar fabiofabio[Desktop Entry] Icon=cs-workspaces Exec=cinnamon-settings workspaces Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Workspaces Name[am]=የስራ ቦታዎች Name[ar]=مساحات العمل Name[ast]=Estayes de trabayu Name[be]=Рабочыя месцы Name[be@latin]=Рабочыя месцы Name[be_BY]=Рабочыя месцы Name[bg]=Работни места Name[bg_BG]=Работни места Name[bs]=Radne površine Name[ca]=Espais de treball Name[ca@valencia]=Espais de treball Name[ca_ES]=Espais de treball Name[ca_ES@valencia]=Espais de treball Name[cs]=Pracovní plochy Name[cs_CZ]=Pracovní plochy Name[cy]=Mannau Gwaith Name[da]=Arbejdsområder Name[da_DK]=Arbejdsområder Name[de]=Arbeitsflächen Name[de_CH]=Arbeitsflächen Name[de_DE]=Arbeitsflächen Name[el]=Χώροι Εργασίας Name[eo]=Laborspacoj Name[es]=Áreas de trabajo Name[es_AR]=Áreas de trabajo Name[es_CL]=Áreas de trabajo Name[es_CO]=Áreas de trabajo Name[es_CR]=Áreas de trabajo Name[es_DO]=Áreas de trabajo Name[es_EC]=Áreas de trabajo Name[es_ES]=Áreas de trabajo Name[es_MX]=Áreas de trabajo Name[es_NI]=Áreas de trabajo Name[es_PA]=Áreas de trabajo Name[es_PE]=Áreas de trabajo Name[es_PR]=Áreas de trabajo Name[es_SV]=Áreas de trabajo Name[es_UY]=Áreas de trabajo Name[es_VE]=Áreas de trabajo Name[et]=Tööruumid Name[et_EE]=Tööruumid Name[eu]=Laneko areak Name[fi]=Työtilat Name[fi_FI]=Työtilat Name[fr]=Espaces de travail Name[fr_CA]=Espaces de travail Name[fr_FR]=Espaces de travail Name[ga]=Spásanna Oibre Name[gd]=Rumannan-obrach Name[gl]=Espazos de traballo Name[gl_ES]=Espazos de traballo Name[hr]=Radni prostori Name[hu]=Munkaterületek Name[hu_HU]=Munkaterületek Name[ia]=Spatios de labor Name[id]=Area kerja Name[id_ID]=Area kerja Name[is]=Vinnusvæði Name[it]=Aree di lavoro Name[it_CH]=Aree di lavoro Name[it_IT]=Aree di lavoro Name[ja]=ワークスペース Name[ja_JP]=ワークスペース Name[ko]=작업 공간 Name[ko_KR]=작업 공간 Name[lo]=ພື້ນທີ່ເຮັດວຽກ Name[lo_LA]=ພື້ນທີ່ເຮັດວຽກ Name[lt]=Darbo sritys Name[lt_LT]=Darbo sritys Name[lv]=Darbvietas Name[lv_LV]=Darbvietas Name[ms]=Ruang Kerja Name[ms_MY]=Ruang Kerja Name[nb]=Arbeidsområder Name[nb_NO]=Arbeidsområder Name[nds]=Arbeitsflächen Name[nl]=Werkbladen Name[nl_NL]=Werkbladen Name[oc]=Espacis de trabalh Name[om]=Iddoowwan hojii Name[pa]=ਵਰਕਸਪੇਸਾਂ Name[pl]=Obszary robocze Name[pl_PL]=Obszary robocze Name[pt]=Áreas de Trabalho Name[pt_BR]=Espaços de Trabalho Name[pt_PT]=Áreas de Trabalho Name[ro]=Spații de lucru Name[ro_RO]=Spații de lucru Name[ru]=Рабочие места Name[sk]=Pracovné priestory Name[sk_SK]=Pracovné priestory Name[sl]=Delovni prostor Name[sl_SI]=Delovni prostor Name[sq]=Hapësirat e punës Name[sr]=Радни простори Name[sr@Latn]=Радни простори Name[sr@ije]=Радни простори Name[sr@ijekavianlatin]=Радни простори Name[sr@latin]=Радни простори Name[sr_RS]=Радни простори Name[sr_RS@latin]=Радни простори Name[sv]=Arbetsytor Name[ta]=பணியிடங்கள் Name[ta_LK]=பணியிடங்கள் Name[tg]=Фазоҳои корӣ Name[th]=พื้นที่ทำงาน Name[th_TH]=พื้นที่ทำงาน Name[tr]=Çalışma Alanları Name[tr_TR]=Çalışma Alanları Name[uk]=Робочі простори Name[uk_UA]=Робочі простори Name[ur]=ورک سپیسز Name[vi]=Vùng làm việc Name[vi_VN]=Vùng làm việc Name[zh_CN]=工作区 Name[zh_HK]=工作區 Name[zh_TW]=工作區 Comment=Manage workspace preferences Comment[am]=የ ስራ ቦታ ምርጫዎች አስተዳዳሪ Comment[ar]=إدارة تفضيلات مساحات العمل Comment[be]=Кіраванне наладамі працоўнага стала Comment[be@latin]=Кіраванне наладамі працоўнага стала Comment[be_BY]=Кіраванне наладамі працоўнага стала Comment[bg]=Управление на настройките за работни плотове Comment[bg_BG]=Управление на настройките за работни плотове Comment[bs]=Upravljaj postavkama radne površine Comment[ca]=Gestioneu les preferències dels espais de treball Comment[ca@valencia]=Administra preferències d'espai de treball Comment[ca_ES]=Gestioneu les preferències dels espais de treball Comment[ca_ES@valencia]=Administra preferències d'espai de treball Comment[cs]=Spravovat nastavení pracovních ploch Comment[cs_CZ]=Spravovat nastavení pracovních ploch Comment[cy]=Rheoli dewisiadau gweithfannau Comment[da]=Administrér arbejdsområdeindstillinger Comment[da_DK]=Administrér arbejdsområdeindstillinger Comment[de]=Arbeitsflächeneinstellungen verwalten Comment[de_CH]=Arbeitsflächeneinstellungen verwalten Comment[de_DE]=Arbeitsflächeneinstellungen verwalten Comment[el]=Ρυθμίστε τους χώρους εργασίας Comment[es]=Administrar preferencias de espacio de trabajo Comment[es_AR]=Administrar preferencias de espacio de trabajo Comment[es_CL]=Administrar preferencias de espacio de trabajo Comment[es_CO]=Administrar preferencias de espacio de trabajo Comment[es_CR]=Administrar preferencias de espacio de trabajo Comment[es_DO]=Administrar preferencias de espacio de trabajo Comment[es_EC]=Administrar preferencias de espacio de trabajo Comment[es_ES]=Administrar preferencias de espacio de trabajo Comment[es_MX]=Administrar preferencias de espacio de trabajo Comment[es_NI]=Administrar preferencias de espacio de trabajo Comment[es_PA]=Administrar preferencias de espacio de trabajo Comment[es_PE]=Administrar preferencias de espacio de trabajo Comment[es_PR]=Administrar preferencias de espacio de trabajo Comment[es_SV]=Administrar preferencias de espacio de trabajo Comment[es_UY]=Administrar preferencias de espacio de trabajo Comment[es_VE]=Administrar preferencias de espacio de trabajo Comment[eu]=Kudeatu laneko areen hobespenak Comment[fi]=Hallitse työtilojen asetuksia Comment[fi_FI]=Hallitse työtilojen asetuksia Comment[fr]=Gérer les préférences de l'espace de travail Comment[fr_CA]=Gérer les préférences des espaces de travail Comment[fr_FR]=Gérer les préférences de l'espace de travail Comment[gd]=Stiùirich roghainnean nan rumannan-obrach Comment[gl]=Administra as preferencias do espazo de traballo Comment[gl_ES]=Administra as preferencias do espazo de traballo Comment[hr]=Upravljajte osobitostima radnog prostora Comment[hu]=Munkaterület beállítások kezelése Comment[hu_HU]=Munkaterület beállítások kezelése Comment[ia]=Gerer le preferentias del spatio de labor Comment[id]=Kelola preferensi ruang kerja Comment[id_ID]=Kelola preferensi ruang kerja Comment[is]=Sýsla með kjörstillingar vinnusvæða Comment[it]=Gestione preferenze area di lavoro Comment[it_CH]=Gestione preferenze area di lavoro Comment[it_IT]=Gestione preferenze area di lavoro Comment[ko]=작업 공간 설정 관리 Comment[ko_KR]=작업 공간 설정 관리 Comment[lt]=Tvarkyti darbo srities nuostatas Comment[lt_LT]=Tvarkyti darbo srities nuostatas Comment[lv]=Pārvaldīt darbvietas preferences Comment[lv_LV]=Pārvaldīt darbvietas preferences Comment[ms]=Mengurus pilihan ruang kerja Comment[ms_MY]=Mengurus pilihan ruang kerja Comment[nb]=Håndter innstillinger for arbeidsområdene Comment[nb_NO]=Håndter innstillinger for arbeidsområdene Comment[nds]=Arbeitsflächeneinstellungen verwalten Comment[nl]=Werkbladvoorkeuren beheren Comment[nl_NL]=Werkbladvoorkeuren beheren Comment[pl]=Zarządzaj preferencjami obszarów roboczych Comment[pl_PL]=Zarządzaj preferencjami obszarów roboczych Comment[pt]=Gerir preferência do espaço de trabalho Comment[pt_BR]=Gerenciar preferências de espaço de trabalho Comment[pt_PT]=Gerir preferência do espaço de trabalho Comment[ro]=Gestionează preferințele spațiului de lucru Comment[ro_RO]=Gestionează preferințele spațiului de lucru Comment[ru]=Настройки рабочих мест Comment[sk]=Spravovať predvoľby pracovnej plochy Comment[sk_SK]=Spravovať predvoľby pracovnej plochy Comment[sl]=Upravljanje z možnostmi delovnih površin Comment[sl_SI]=Upravljanje z možnostmi delovnih površin Comment[sq]=Menaxho parapëlqimet e hapësirave të punës Comment[sr]=Управљање поставкама радног простора Comment[sr@Latn]=Управљање поставкама радног простора Comment[sr@ije]=Управљање поставкама радног простора Comment[sr@ijekavianlatin]=Управљање поставкама радног простора Comment[sr@latin]=Управљање поставкама радног простора Comment[sr_RS]=Управљање поставкама радног простора Comment[sr_RS@latin]=Управљање поставкама радног простора Comment[sv]=Hantera inställningar för arbetsyta Comment[tg]=Идоракунии хусусиятҳои фазои корӣ Comment[th]=จัดการการตั้งค่าพื้นที่ทำงานขั้นสูง Comment[th_TH]=จัดการการตั้งค่าพื้นที่ทำงานขั้นสูง Comment[tr]=Çalışma alanı seçeneklerini yönet Comment[tr_TR]=Çalışma alanı seçeneklerini yönet Comment[uk]=Керувати параметрами робочого простору Comment[uk_UA]=Керувати параметрами робочого простору Comment[ur]=ورک سپیس کی ترجیحات Comment[vi]=Quản lý tuỳ thích vùng làm việc Comment[vi_VN]=Quản lý tuỳ thích vùng làm việc Comment[zh_CN]=工作区设置 Comment[zh_HK]=管理工作區喜好設定 Comment[zh_TW]=管理工作區偏好設定 Keywords=workspace;osd;expo;monitor; Keywords[ar]=مساحة عمل ، ، معرض ، شاشة، اعلام على الشاشة; Keywords[be]=рабочая вобласць;osd;экспазіцыя;манітор; Keywords[be@latin]=рабочая вобласць;osd;экспазіцыя;манітор; Keywords[be_BY]=рабочая вобласць;osd;экспазіцыя;манітор; Keywords[bg]=работно място;osd;експозиция;монитор; Keywords[bg_BG]=работно място;osd;експозиция;монитор; Keywords[bs]=radna površina;osd;expo;monitor; Keywords[ca]=espai de treball;osd;expo;monitor; Keywords[ca@valencia]=espai de treball;mostrar en pantalla (OSD);exposició;monitor; Keywords[ca_ES]=espai de treball;osd;expo;monitor; Keywords[ca_ES@valencia]=espai de treball;mostrar en pantalla (OSD);exposició;monitor; Keywords[cs]=pracovní plocha;osd;expo;monitor; Keywords[cs_CZ]=pracovní plocha;osd;expo;monitor; Keywords[cy]=man gwaith;osd;expo;monitor; Keywords[da]=arbejdsområde;osd;vis arbejdsområder;skærm; Keywords[da_DK]=arbejdsområde;osd;vis arbejdsområder;skærm; Keywords[de]=Arbeitsfläche;OSD;Bildschirmanzeige;Schreibtischübersicht;Arbeitsflächenübersicht;Expo;Monitor; Keywords[de_CH]=Arbeitsfläche;OSD;Bildschirmanzeige;Schreibtischübersicht;Arbeitsflächenübersicht;Expo;Monitor; Keywords[de_DE]=Arbeitsfläche;OSD;Bildschirmanzeige;Schreibtischübersicht;Arbeitsflächenübersicht;Expo;Monitor; Keywords[el]=χώρος εργασίας;osd;expo;οθόνη; Keywords[es]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_AR]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_CL]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_CO]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_CR]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_DO]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_EC]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_ES]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_MX]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_NI]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_PA]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_PE]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_PR]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_SV]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_UY]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[es_VE]=espacio de trabajo;mostrar en pantalla (OSD);expo;monitor; Keywords[eu]=laneko area;osd;expo;monitorea; Keywords[fi]=työtila;osd;esittelynäkymä;näyttö; Keywords[fi_FI]=työtila;osd;esittelynäkymä;näyttö; Keywords[fr]=espace de travail;osd;expo;moniteur; Keywords[fr_CA]=espace de travail;osd;expo;moniteur; Keywords[fr_FR]=espace de travail;osd;expo;moniteur; Keywords[ga]=spás oibre;osd;expo;monatóir; Keywords[gd]=rum-obrach;osd;expo;sealladair;workspace;monatair; Keywords[gl]=espazo de traballo;osd;exposición;monitor; Keywords[gl_ES]=espazo de traballo;osd;exposición;monitor; Keywords[hr]=radni prostor;osd;prikaz radnih prostora;zaslon računala; Keywords[hu]=munkaterület;képernyőkijelzés;osd;közszemle;képernyő; Keywords[hu_HU]=munkaterület;képernyőkijelzés;osd;közszemle;képernyő; Keywords[ia]=spatio de labor;OSD;Expo;monitor; Keywords[id]=area kerja;osd;expo;monitor; Keywords[id_ID]=area kerja;osd;expo;monitor; Keywords[is]=vinnusvæði;stjórntexti;expo;skjár; Keywords[it]=area di lavoro;osd;expo;monitor; Keywords[it_CH]=area di lavoro;osd;expo;monitor; Keywords[it_IT]=area di lavoro;osd;expo;monitor; Keywords[ja]=ワークスペース、OSD、expo、モニタ; Keywords[ja_JP]=ワークスペース、OSD、expo、モニタ; Keywords[ko]=작업 공간;osd;작업 공간 표시;살펴보기; Keywords[ko_KR]=작업 공간;osd;작업 공간 표시;살펴보기; Keywords[ms]=ruang kerja;osd;expo;monitor; Keywords[ms_MY]=ruang kerja;osd;expo;monitor; Keywords[nds]=Arbeitsbereich;OSD;Expo;Monitor; Keywords[nl]=werkblad;osd;expo;beeldscherm; Keywords[nl_NL]=werkblad;osd;expo;beeldscherm; Keywords[om]=iddoo hojii;osd;***;torgii; Keywords[pl]=Obszar roboczy;OSD;expo;monitor; Keywords[pl_PL]=Obszar roboczy;OSD;expo;monitor; Keywords[pt]=área de trabalho;osd;expo;monitor; Keywords[pt_BR]=espaço de trabalho;exibição na tela;exposição;monitor; Keywords[pt_PT]=área de trabalho;osd;expo;monitor; Keywords[ro]=spațiu de lucru;osd;expo;monitor; Keywords[ro_RO]=spațiu de lucru;osd;expo;monitor; Keywords[ru]=рабочее место;экранная индикация;expo;монитор; Keywords[sk]=pracovná plocha;osd;expo;monitor; Keywords[sk_SK]=pracovná plocha;osd;expo;monitor; Keywords[sl]=delovni prostor;osd;razstava;monitor; Keywords[sl_SI]=delovni prostor;osd;razstava;monitor; Keywords[sr]=радни простор;простирање;осд;екран; Keywords[sr@Latn]=радни простор;простирање;осд;екран; Keywords[sr@ije]=радни простор;простирање;осд;екран; Keywords[sr@ijekavianlatin]=радни простор;простирање;осд;екран; Keywords[sr@latin]=радни простор;простирање;осд;екран; Keywords[sr_RS]=радни простор;простирање;осд;екран; Keywords[sr_RS@latin]=радни простор;простирање;осд;екран; Keywords[sv]=arbetsyta;OSD;exponering;monitor; Keywords[ta]=பணியிடம்;மேல் திரை காட்சி;கண்காட்சி;திரையகம்; Keywords[ta_LK]=பணியிடம்;மேல் திரை காட்சி;கண்காட்சி;திரையகம்; Keywords[tg]=фазои корӣ;osd;намоиш;монитор; Keywords[th]=พื้นที่ทำงาน;osd;expo;หน้าจอ; Keywords[th_TH]=พื้นที่ทำงาน;osd;expo;หน้าจอ; Keywords[tr]=çalışma alanı;osd;sergi;ekran; Keywords[tr_TR]=çalışma alanı;osd;sergi;ekran; Keywords[uk]=робочий простір;екранне сповіщення;експозиція;монітор; Keywords[uk_UA]=робочий простір;екранне сповіщення;експозиція;монітор; Keywords[ur]=ورک سپیس، آن-سکرین ڈسپلے، OSD، ایکسپو، expo، مانیٹر; Keywords[vi]=vùng làm việc;osd;expo;màn hình; Keywords[vi_VN]=vùng làm việc;osd;expo;màn hình; Keywords[zh_CN]=workspace;osd;expo;monitor;工作区;屏幕显示;显示器;展现; Keywords[zh_HK]=工作區;OSD;expo;顯示器; Keywords[zh_TW]=工作區;螢幕顯示 (OSD);工作區管理 (Expo);顯示器; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-backgrounds.desktop0000664000175000017500000004424313215735076027273 0ustar fabiofabio[Desktop Entry] Icon=cs-backgrounds Exec=cinnamon-settings backgrounds Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Backgrounds Name[am]=መደቦች Name[ar]=الخلفيات Name[ast]=Fondos de pantalla Name[be]=фон Name[be@latin]=фон Name[be_BY]=фон Name[bg]=Фон Name[bg_BG]=Фон Name[bs]=Pozadine Name[ca]=Fons de l'escriptori Name[ca@valencia]=Fons de pantalla Name[ca_ES]=Fons de l'escriptori Name[ca_ES@valencia]=Fons de pantalla Name[cs]=Pozadí Name[cs_CZ]=Pozadí Name[cy]=Cefndiroedd Name[da]=Baggrunde Name[da_DK]=Baggrunde Name[de]=Hintergrundbilder Name[de_CH]=Hintergrundbilder Name[de_DE]=Hintergrundbilder Name[el]=Φόντο Name[eo]=Fonoj Name[es]=Fondos Name[es_AR]=Fondos Name[es_CL]=Fondos Name[es_CO]=Fondos Name[es_CR]=Fondos Name[es_DO]=Fondos Name[es_EC]=Fondos Name[es_ES]=Fondos Name[es_MX]=Fondos Name[es_NI]=Fondos Name[es_PA]=Fondos Name[es_PE]=Fondos Name[es_PR]=Fondos Name[es_SV]=Fondos Name[es_UY]=Fondos Name[es_VE]=Fondos Name[et]=Taustad Name[et_EE]=Taustad Name[eu]=Atzeko planoak Name[fa]=پس‌زمینه‌ها Name[fa_AF]=پس‌زمینه‌ها Name[fa_IR]=پس‌زمینه‌ها Name[fi]=Taustat Name[fi_FI]=Taustat Name[fr]=Fonds d'écran Name[fr_CA]=Fonds d'écran Name[fr_FR]=Fonds d'écran Name[fy]=Eftergrûn Name[ga]=Cúlraí Name[gd]=Cùlaibhean Name[gl]=Fondos Name[gl_ES]=Fondos Name[he]=רקעים Name[he_IL]=רקעים Name[hr]=Pozadine Name[hu]=Háttérképek Name[hu_HU]=Háttérképek Name[ia]=Fundos Name[id]=Latar belakang Name[id_ID]=Latar belakang Name[is]=Bakgrunnar Name[it]=Sfondi Name[it_CH]=Sfondi Name[it_IT]=Sfondi Name[ja]=背景 Name[ja_JP]=背景 Name[kab]=Idren n wegdil Name[ko]=배경화면 Name[ko_KR]=배경화면 Name[lo]=ພື້ນຫຼັງ Name[lo_LA]=ພື້ນຫຼັງ Name[lt]=Fonai Name[lt_LT]=Fonai Name[lv]=Fona attēli Name[lv_LV]=Fona attēli Name[ms]=Latar Belakang Name[ms_MY]=Latar Belakang Name[nb]=Bakgrunner Name[nb_NO]=Bakgrunner Name[nds]=Hintergrundbilder Name[nl]=Achtergronden Name[nl_NL]=Achtergronden Name[oc]=Rèireplans Name[pa]=ਬੈਕਗਰਾਉਂਡ Name[pl]=Tła Name[pl_PL]=Tła Name[pt]=Fundos Name[pt_BR]=Planos de Fundo Name[pt_PT]=Fundos Name[ro]=Fundaluri Name[ro_RO]=Fundaluri Name[ru]=Фоновые рисунки Name[sc]=Fundales Name[sk]=Pozadia Name[sk_SK]=Pozadia Name[sl]=Ozadja Name[sl_SI]=Ozadja Name[sq]=Sfondet Name[sr]=Позадине Name[sr@Latn]=Позадине Name[sr@ije]=Позадине Name[sr@ijekavianlatin]=Позадине Name[sr@latin]=Позадине Name[sr_RS]=Позадине Name[sr_RS@latin]=Позадине Name[sv]=Bakgrundsbilder Name[ta]=பின்னணிகள் Name[ta_LK]=பின்னணிகள் Name[tg]=Пасзаминаҳо Name[th]=พื้นหลัง Name[th_TH]=พื้นหลัง Name[tr]=Arkaplanlar Name[tr_TR]=Arkaplanlar Name[uk]=Зображення тла Name[uk_UA]=Зображення тла Name[ur]=پسِ منظر Name[uz]=Фонлар Name[uz@cyrillic]=Фонлар Name[vi]=Hình nền Name[vi_VN]=Hình nền Name[zh_CN]=背景 Name[zh_HK]=背景 Name[zh_TW]=背景 Comment=Change your desktop's background Comment[am]=የዴስክቶፕ መደብ መቀየሪያ Comment[ar]=غيّر خلفية سطح المكتب Comment[ast]=Camuda'l fondu del to escritoriu Comment[az]=Masaüstü arxafonunu dəyiş Comment[az_AZ]=Masaüstü arxafonunu dəyiş Comment[be]=Змянiце фон працоўнага стала Comment[be@latin]=Змянiце фон працоўнага стала Comment[be_BY]=Змянiце фон працоўнага стала Comment[bg]=Промяна на фона на работния плот Comment[bg_BG]=Промяна на фона на работния плот Comment[bs]=Promjenite vašu pozadinu na desktopu Comment[ca]=Canviar el fons de l'escriptori Comment[ca@valencia]=Canviar el fons d'escriptori Comment[ca_ES]=Canviar el fons de l'escriptori Comment[ca_ES@valencia]=Canviar el fons d'escriptori Comment[cs]=Změna pozadí plochy Comment[cs_CZ]=Změna pozadí plochy Comment[cy]=Newidiwch gefndir eich bwrdd gwaith Comment[da]=Ændr din skrivebordsbaggrund Comment[da_DK]=Ændr din skrivebordsbaggrund Comment[de]=Schreibtischhintergrund ändern Comment[de_CH]=Schreibtischhintergrund ändern Comment[de_DE]=Schreibtischhintergrund ändern Comment[el]=Άλλαξε το φόντο της επιφάνειας εργασίας Comment[es]=Cambiar el fondo de escritorio Comment[es_AR]=Cambiar el fondo de escritorio Comment[es_CL]=Cambiar el fondo de escritorio Comment[es_CO]=Cambiar el fondo de escritorio Comment[es_CR]=Cambiar el fondo de escritorio Comment[es_DO]=Cambiar el fondo de escritorio Comment[es_EC]=Cambiar el fondo de escritorio Comment[es_ES]=Cambiar el fondo de escritorio Comment[es_MX]=Cambiar el fondo de escritorio Comment[es_NI]=Cambiar el fondo de escritorio Comment[es_PA]=Cambiar el fondo de escritorio Comment[es_PE]=Cambiar el fondo de escritorio Comment[es_PR]=Cambiar el fondo de escritorio Comment[es_SV]=Cambiar el fondo de escritorio Comment[es_UY]=Cambiar el fondo de escritorio Comment[es_VE]=Cambiar el fondo de escritorio Comment[eu]=Aldatu mahaigainaren atzeko planoa Comment[fa]=پس‌زمینه‌ی دسکتاپ‌تان را تغییر دهید Comment[fa_AF]=پس‌زمینه‌ی دسکتاپ‌تان را تغییر دهید Comment[fa_IR]=پس‌زمینه‌ی دسکتاپ‌تان را تغییر دهید Comment[fi]=Muuta työpöydän taustakuvaa Comment[fi_FI]=Muuta työpöydän taustakuvaa Comment[fr]=Changer le fond d'écran Comment[fr_CA]=Modifier votre fond d'écran Comment[fr_FR]=Changer le fond d'écran Comment[fy]=Bureaublêd eftergrûn feroarje Comment[gd]=Atharraich cùlaibh an desktop agad Comment[gl]=Cambia o fondo do escritorio Comment[gl_ES]=Cambia o fondo do escritorio Comment[hr]=Promijenite pozadinu svoje redne površine Comment[hu]=Asztal hátterének megváltoztatása Comment[hu_HU]=Asztal hátterének megváltoztatása Comment[ia]=Cambia le fundo de tu scriptorio Comment[id]=Ubah background desktop Comment[id_ID]=Ubah background desktop Comment[is]=Breyta bakgrunni skjáborðs Comment[it]=Cambia sfondo del desktop Comment[it_CH]=Cambia sfondo del desktop Comment[it_IT]=Cambia sfondo del desktop Comment[ja]=デスクトップ背景の変更 Comment[ja_JP]=デスクトップ背景の変更 Comment[kab]=Beddel agilal n tnarit-ik Comment[ko]=배경화면 변경 Comment[ko_KR]=배경화면 변경 Comment[lo]=ປ່ຽນພື້ນຫຼັງໜ້າຈໍຂອງເຈົ້າ Comment[lo_LA]=ປ່ຽນພື້ນຫຼັງໜ້າຈໍຂອງເຈົ້າ Comment[lt]=Pakeisti darbalaukio foną Comment[lt_LT]=Pakeisti darbalaukio foną Comment[lv]=Mainīt darbvirsmas fona attēlu Comment[lv_LV]=Mainīt darbvirsmas fona attēlu Comment[ms]=Tukar latar belakang desktop Comment[ms_MY]=Tukar latar belakang desktop Comment[nb]=Endre skrivebordsbakgrunnen din Comment[nb_NO]=Endre skrivebordsbakgrunnen din Comment[nds]=Desktophintergrund ändern Comment[nl]=Verander de achtergrond van uw bureaublad Comment[nl_NL]=Verander de achtergrond van uw bureaublad Comment[oc]=Cambiar lo rèireplan de vòstre burèu Comment[pl]=Zmień tło pulpitu Comment[pl_PL]=Zmień tło pulpitu Comment[pt]=Mudar o fundo do seu ambiente de trabalho Comment[pt_BR]=Alterar plano de fundo de sua área de trabalho Comment[pt_PT]=Mudar o fundo do seu ambiente de trabalho Comment[ro]=Schimbă imaginea de fundal Comment[ro_RO]=Schimbă imaginea de fundal Comment[ru]=Изменить обои рабочего стола Comment[sc]=Càmbia su fundale de s'iscriania Comment[sk]=Zmeniť pozadie plochy Comment[sk_SK]=Zmeniť pozadie plochy Comment[sl]=Spremenite ozadje namizja Comment[sl_SI]=Spremenite ozadje namizja Comment[sq]=Ndryshoni sfondin e desktopit tuaj Comment[sr]=Промените позадину радне површи Comment[sr@Latn]=Промените позадину радне површи Comment[sr@ije]=Промените позадину радне површи Comment[sr@ijekavianlatin]=Промените позадину радне површи Comment[sr@latin]=Промените позадину радне површи Comment[sr_RS]=Промените позадину радне површи Comment[sr_RS@latin]=Промените позадину радне површи Comment[sv]=Byt skrivbordsbakgrund Comment[ta]=பணிமேடையின் பின்னணியை மாற்று Comment[ta_LK]=பணிமேடையின் பின்னணியை மாற்று Comment[tg]=Тағйир додани пасзаминаи мизи корӣ Comment[th]=เปลี่ยนพื้นหลังบนพื้นโต๊ะของคุณ Comment[th_TH]=เปลี่ยนพื้นหลังบนพื้นโต๊ะของคุณ Comment[tr]=Masaüstü arkaplan resmini değiştir Comment[tr_TR]=Masaüstü arkaplan resmini değiştir Comment[uk]=Змінити тло стільниці Comment[uk_UA]=Змінити тло стільниці Comment[ur]=ڈیسک ٹاپ پس منظر تبدیل کریں Comment[uz]=Иш столи фонини ўзгартиринг Comment[uz@cyrillic]=Иш столи фонини ўзгартиринг Comment[vi]=Đổi nền màn hình làm việc Comment[vi_VN]=Đổi nền màn hình làm việc Comment[zh_CN]=修改桌面背景 Comment[zh_HK]=變更你桌面的背景 Comment[zh_TW]=變更您的桌面背景 Keywords=background;picture;screenshot;slideshow; Keywords[am]=መደብ : ስእል : የመመልከቻ ፎቶ : ተንሸራታች ማሳያ; Keywords[ar]=خلفية، صورة، صورة ملتقطة، عرض الصور; Keywords[be]=фон;выява;скрыншот;слайд-шоў; Keywords[be@latin]=фон;выява;скрыншот;слайд-шоў; Keywords[be_BY]=фон;выява;скрыншот;слайд-шоў; Keywords[bg]=тапет;изображение;screenshot;slideshow; Keywords[bg_BG]=тапет;изображение;screenshot;slideshow; Keywords[bs]=pozadina;slika;slika ekrana;prezentacija slajdova; Keywords[ca]=fons;imatge;captura de pantalla;mostra de diapositives; Keywords[ca@valencia]=fons;imatge;captura de pantalla;presentació de diapositives; Keywords[ca_ES]=fons;imatge;captura de pantalla;mostra de diapositives; Keywords[ca_ES@valencia]=fons;imatge;captura de pantalla;presentació de diapositives; Keywords[cs]=pozadí;obrázek;screenshot;prezentace; Keywords[cs_CZ]=pozadí;obrázek;screenshot;prezentace; Keywords[cy]=cefndir;darlun;cliplun;sioe sleidiau; Keywords[da]=baggrund;billede;skærmbillede;slideshow; Keywords[da_DK]=baggrund;billede;skærmbillede;slideshow; Keywords[de]=Hintergrund;Bild;Bildschirmaufnahme;Diaschau;background;picture;screenshot;slideshow; Keywords[de_CH]=Hintergrund;Bild;Bildschirmaufnahme;Diaschau;background;picture;screenshot;slideshow; Keywords[de_DE]=Hintergrund;Bild;Bildschirmaufnahme;Diaschau;background;picture;screenshot;slideshow; Keywords[el]=παρασκήνιο;εικόνα;στιγμιότυπο;προβολή διαφανειών;φόντο;ταπετσαρία; Keywords[es]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_AR]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_CL]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_CO]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_CR]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_DO]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_EC]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_ES]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_MX]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_NI]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_PA]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_PE]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_PR]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_SV]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_UY]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[es_VE]=fondo;imagen;captura de pantalla;presentación de diapositivas; Keywords[eu]=atzeko planoa;irudia;pantaila-argazkia;diaporama; Keywords[fa]=پس‌زمینه، تصویر، اسکرین‌شات، اسلایدشو; Keywords[fa_AF]=پس‌زمینه، تصویر، اسکرین‌شات، اسلایدشو; Keywords[fa_IR]=پس‌زمینه، تصویر، اسکرین‌شات، اسلایدشو; Keywords[fi]=tausta;kuva;kuvankaappaus;diaesitys; Keywords[fi_FI]=tausta;kuva;kuvankaappaus;diaesitys; Keywords[fr]=fond;image;capture d'écran;diaporama; Keywords[fr_CA]=fond;image;capture d'écran;diaporama; Keywords[fr_FR]=fond;image;capture d'écran;diaporama; Keywords[fy]=eftergrûn;printsje;skermôfbielding;diapresentaasje; Keywords[ga]=cúlra;pictiúr;gabháil scáileáin;taispeántas sleamhnáin; Keywords[gd]=cùlaibh;dealbh;glacadh-sgrìn;taisbeanadh-shleamhnagan;background;picture;screenshot;slideshow; Keywords[gl]=fondo;imaxe;captura de pantalla;diaporama; Keywords[gl_ES]=fondo;imaxe;captura de pantalla;diaporama; Keywords[hr]=pozadina;slika;snimka zaslona;promjena pozadine; Keywords[hu]=háttér;kép;képernyőkép;diavetítés; Keywords[hu_HU]=háttér;kép;képernyőkép;diavetítés; Keywords[ia]=fundo;photo;captura de schermo;presentation de photos; Keywords[id]=latar belakang;gambar;tangkapan layar;slideshow; Keywords[id_ID]=latar belakang;gambar;tangkapan layar;slideshow; Keywords[is]=bakgrunnur;mynd;skjámynd;skyggnusýning; Keywords[it]=sfondo;immagine;screenshot;diapositive; Keywords[it_CH]=sfondo;immagine;screenshot;diapositive; Keywords[it_IT]=sfondo;immagine;screenshot;diapositive; Keywords[ja]=背景、写真、スクリーンショット、スライドショー; Keywords[ja_JP]=背景、写真、スクリーンショット、スライドショー; Keywords[kab]=agilal;tugna;tuddma n wegdil;tigiri; Keywords[ko]=배경화면;사진;스크린샷;슬라이드쇼; Keywords[ko_KR]=배경화면;사진;스크린샷;슬라이드쇼; Keywords[lo]=ພື້ນຫຼັງ;ຮູບພາບ;ພາບໜ້າຈໍ;ສະໄລໂຊວ໌; Keywords[lo_LA]=ພື້ນຫຼັງ;ຮູບພາບ;ພາບໜ້າຈໍ;ສະໄລໂຊວ໌; Keywords[lt]=fonas;paveikslėlis;ekranvaizdis;demonstracija; Keywords[lt_LT]=fonas;paveikslėlis;ekranvaizdis;demonstracija; Keywords[lv]=fona attēls;attēls;ekrānuzņēmums;slīdrāde; Keywords[lv_LV]=fona attēls;attēls;ekrānuzņēmums;slīdrāde; Keywords[ms]=latar belakang;gambar;cekupan skrin;paparan skrin; Keywords[ms_MY]=latar belakang;gambar;cekupan skrin;paparan skrin; Keywords[nb]=bakgrunn;bilde;skjermbilde;bildefremvisning; Keywords[nb_NO]=bakgrunn;bilde;skjermbilde;bildefremvisning; Keywords[nds]=Hintergrund;Bild;Screenshot;Diashow; Keywords[nl]=achtergrond;foto;schermafdruk;diavertoning; Keywords[nl_NL]=achtergrond;foto;schermafdruk;diavertoning; Keywords[pa]=ਬੈਕਗਰਾਉਂਡ;ਤਸਵੀਰ;ਸਕਰੀਨਸ਼ਾੱਟ;ਸਲਾਇਡ-ਸ਼ੋ; Keywords[pl]=tapeta;zdjęcie;zrzut ekranu;pokaz slajdów; Keywords[pl_PL]=tapeta;zdjęcie;zrzut ekranu;pokaz slajdów; Keywords[pt]=fundo;imagem;captura;apresentação; Keywords[pt_BR]=plano de fundo;imagem;captura de tela;apresentação de slides; Keywords[pt_PT]=fundo;imagem;captura;apresentação; Keywords[ro]=fundal;poză;captură de ecran;slideshow; Keywords[ro_RO]=fundal;poză;captură de ecran;slideshow; Keywords[ru]=фоновый;рисунок;снимок экрана;слайд-шоу; Keywords[sc]=fundale;immàgine;caturischermu;presentatzione; Keywords[sk]=pozadie;obrázok;screenshot;prezentácia; Keywords[sk_SK]=pozadie;obrázok;screenshot;prezentácia; Keywords[sl]=ozadje;slika;zaslonska slika;predstavitev; Keywords[sl_SI]=ozadje;slika;zaslonska slika;predstavitev; Keywords[sq]=sfondi;figura;screeshot;prezantimi; Keywords[sr]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr@Latn]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr@ije]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr@ijekavianlatin]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr@latin]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr_RS]=позадина;слика;снимак екрана;покретни приказ; Keywords[sr_RS@latin]=позадина;слика;снимак екрана;покретни приказ; Keywords[sv]=bakgrund;bild;skärmdump;bildspel; Keywords[ta]=பின்னணி;படம்;திரைப்பிடிப்பு;சறுக்குகாட்சி; Keywords[ta_LK]=பின்னணி;படம்;திரைப்பிடிப்பு;சறுக்குகாட்சி; Keywords[tg]=пасзамина;тасвир;сурати экран;намоиши слайдҳо; Keywords[th]=พื้นหลัง;รูปภาพ;ภาพหน้าจอ;การนำเสนอภาพนิ่ง; Keywords[th_TH]=พื้นหลัง;รูปภาพ;ภาพหน้าจอ;การนำเสนอภาพนิ่ง; Keywords[tr]=arkaplan;resim;ekran görüntüsü;slayt gösterisi; Keywords[tr_TR]=arkaplan;resim;ekran görüntüsü;slayt gösterisi; Keywords[uk]=тло;зображення;зняток екрану;показ слайдів; Keywords[uk_UA]=тло;зображення;зняток екрану;показ слайдів; Keywords[ur]=پس منظر، تصویر، سکرین شاٹ، سکرین کی تصویر، سلائڈشو، سلائڈ شو; Keywords[uz]=фон;расм;экран тасвири;слайд-шоу; Keywords[uz@cyrillic]=фон;расм;экран тасвири;слайд-шоу; Keywords[vi]=hình nền;hình ảnh;ảnh chụp màn hình;trình chiếu; Keywords[vi_VN]=hình nền;hình ảnh;ảnh chụp màn hình;trình chiếu; Keywords[zh_CN]=背景,图像,截图,幻灯片; Keywords[zh_HK]=背景;圖片;熒幕截圖;幻燈片; Keywords[zh_TW]=背景;圖片;螢幕截圖;幻燈片放映; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-keyboard.desktop0000664000175000017500000004321413215735076026566 0ustar fabiofabio[Desktop Entry] Icon=cs-keyboard Exec=cinnamon-settings keyboard Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Keyboard Name[af]=Sleutelbord Name[am]=የፊደል ገበታ Name[ar]=لوحة المفاتيح Name[ast]=Tecláu Name[az]=Klaviatura Name[az_AZ]=Klaviatura Name[be]=Клавіятура Name[be@latin]=Клавіятура Name[be_BY]=Клавіятура Name[bg]=Клавиатура Name[bg_BG]=Клавиатура Name[bn]=কীবোর্ড Name[bn_IN]=কীবোর্ড Name[bs]=Tastatura Name[ca]=Teclat Name[ca@valencia]=Teclat Name[ca_ES]=Teclat Name[ca_ES@valencia]=Teclat Name[crh]=Klavye Name[cs]=Klávesnice Name[cs_CZ]=Klávesnice Name[csb]=Klawiatura Name[cy]=Bysellfwrdd Name[da]=Tastatur Name[da_DK]=Tastatur Name[de]=Tastatur Name[de_CH]=Tastatur Name[de_DE]=Tastatur Name[el]=Πληκτρολόγιο Name[eo]=Klavaro Name[es]=Teclado Name[es_AR]=Teclado Name[es_CL]=Teclado Name[es_CO]=Teclado Name[es_CR]=Teclado Name[es_DO]=Teclado Name[es_EC]=Teclado Name[es_ES]=Teclado Name[es_MX]=Teclado Name[es_NI]=Teclado Name[es_PA]=Teclado Name[es_PE]=Teclado Name[es_PR]=Teclado Name[es_SV]=Teclado Name[es_UY]=Teclado Name[es_VE]=Teclado Name[et]=Klaviatuur Name[et_EE]=Klaviatuur Name[eu]=Teklatua Name[fa]=صفحه‌کلید Name[fa_AF]=صفحه‌کلید Name[fa_IR]=صفحه‌کلید Name[fi]=Näppäimistö Name[fi_FI]=Näppäimistö Name[fo]=Knappaborð Name[fr]=Clavier Name[fr_CA]=Clavier Name[fr_FR]=Clavier Name[fy]=Toetseboerd Name[ga]=Méarchlár Name[gd]=Meur-chlàr Name[gl]=Teclado Name[gl_ES]=Teclado Name[he]=מקלדת Name[he_IL]=מקלדת Name[hi]=कीबोर्ड Name[hr]=Tipkovnica Name[hu]=Billentyűzet Name[hu_HU]=Billentyűzet Name[hy]=Ստեղնաշար Name[ia]=Claviero Name[id]=Papan ketik Name[id_ID]=Papan ketik Name[is]=Lyklaborð Name[it]=Tastiera Name[it_CH]=Tastiera Name[it_IT]=Tastiera Name[ja]=キーボード Name[ja_JP]=キーボード Name[jv]=Kibot Name[ka]=კლავიატურა Name[kab]=Anasiw Name[kk]=Пернетақта Name[km]=ក្ដារចុច Name[km_KH]=ក្ដារចុច Name[kn]=ಕೀಲಿಮಣೆ Name[ko]=키보드 Name[ko_KR]=키보드 Name[la]=Claviatura Name[li]=Toetsebord Name[lo]=ແປ້ນພີມ Name[lo_LA]=ແປ້ນພີມ Name[lt]=Klaviatūra Name[lt_LT]=Klaviatūra Name[lv]=Tastatūra Name[lv_LV]=Tastatūra Name[ml]=കീബോര്‍ഡ് Name[mr]=कळफलक Name[ms]=Papan Kekunci Name[ms_MY]=Papan Kekunci Name[nb]=Tastatur Name[nb_NO]=Tastatur Name[nds]=Tastatur Name[ne]=कीबोर्ड Name[nl]=Toetsenbord Name[nl_NL]=Toetsenbord Name[nn]=Tastatur Name[nn_NO]=Tastatur Name[oc]=Clavièr Name[om]=Gabatee furtuu Name[pa]=ਕੀਬੋਰਡ Name[pl]=Klawiatura Name[pl_PL]=Klawiatura Name[pt]=Teclado Name[pt_BR]=Teclado Name[pt_PT]=Teclado Name[ro]=Tastatură Name[ro_RO]=Tastatură Name[ru]=Клавиатура Name[rue]=Клавїатура Name[sc]=Tastiera Name[si]=යතුරුපුවරුව Name[sk]=Klávesnica Name[sk_SK]=Klávesnica Name[sl]=Tipkovnica Name[sl_SI]=Tipkovnica Name[so]=Kiiboorka Name[sq]=Tastiera Name[sr]=Тастатура Name[sr@Latn]=Tastatura Name[sr@ije]=Тастатура Name[sr@ijekavianlatin]=Тастатура Name[sr@latin]=Tastatura Name[sr_RS]=Тастатура Name[sr_RS@latin]=Tastatura Name[sv]=Tangentbord Name[ta]=விசைப்பலகை Name[ta_LK]=விசைப்பலகை Name[te]=కీబోర్డు Name[tg]=Клавиатура Name[th]=แป้นพิมพ์ Name[th_TH]=แป้นพิมพ์ Name[tl]=Tiklado Name[tpi]=Kibot Name[tr]=Klavye Name[tr_TR]=Klavye Name[ts]=Khibodo Name[uk]=Набірниця Name[uk_UA]=Набірниця Name[ur]=کی بورڈ Name[uz]=Клавиатура Name[uz@cyrillic]=Клавиатура Name[vi]=Bàn phím Name[vi_VN]=Bàn phím Name[zh_CN]=键盘 Name[zh_HK]=鍵盤 Name[zh_TW]=鍵盤 Comment=Manage keyboard settings and shortcuts Comment[am]=የፊደል ገበታ ማሰናጃዎች እና የ አቋራጭ ቁልፍ አስተዳዳሪ Comment[ar]=إدارة إعدادات لوحة المفاتيح والاختصارات Comment[be]=Кіраванне наладамі клавіятуры і гарачымі клавішамі Comment[be@latin]=Кіраванне наладамі клавіятуры і гарачымі клавішамі Comment[be_BY]=Кіраванне наладамі клавіятуры і гарачымі клавішамі Comment[bg]=Управление на клавишните настройки и преки пътища Comment[bg_BG]=Управление на клавишните настройки и преки пътища Comment[bs]=Upravljaj postavkama tastature i prečica Comment[ca]=Gestioneu els ajusts del teclat i les dreceres Comment[ca@valencia]=Administrar configuració i atalls de teclat Comment[ca_ES]=Gestioneu els ajusts del teclat i les dreceres Comment[ca_ES@valencia]=Administrar configuració i atalls de teclat Comment[cs]=Nastavení klásenice a klávesových zkratek Comment[cs_CZ]=Nastavení klásenice a klávesových zkratek Comment[cy]=Rheoli gosodiadau a llwybrau byr bysellfwrdd Comment[da]=Administrér tastaturindstillinger og genveje Comment[da_DK]=Administrér tastaturindstillinger og genveje Comment[de]=Tastatureinstellungen und Tastenkombinationen verwalten Comment[de_CH]=Tastatureinstellungen und Tastenkombinationen verwalten Comment[de_DE]=Tastatureinstellungen und Tastenkombinationen verwalten Comment[el]=Διαχείριση ρυθμίσεων πληκτρολογίου και πλήκτρων συντόμευσης Comment[es]=Administrar configuración de teclado y accesos directos Comment[es_AR]=Administrar configuración de teclado y accesos directos Comment[es_CL]=Administrar configuración de teclado y accesos directos Comment[es_CO]=Administrar configuración de teclado y accesos directos Comment[es_CR]=Administrar configuración de teclado y accesos directos Comment[es_DO]=Administrar configuración de teclado y accesos directos Comment[es_EC]=Administrar configuración de teclado y accesos directos Comment[es_ES]=Administrar configuración de teclado y accesos directos Comment[es_MX]=Administrar configuración de teclado y accesos directos Comment[es_NI]=Administrar configuración de teclado y accesos directos Comment[es_PA]=Administrar configuración de teclado y accesos directos Comment[es_PE]=Administrar configuración de teclado y accesos directos Comment[es_PR]=Administrar configuración de teclado y accesos directos Comment[es_SV]=Administrar configuración de teclado y accesos directos Comment[es_UY]=Administrar configuración de teclado y accesos directos Comment[es_VE]=Administrar configuración de teclado y accesos directos Comment[eu]=Kudeatu teklatuaren ezarpen eta laster-teklak Comment[fi]=Muuta näppäimistön asetuksia ja pikanäppäimiä Comment[fi_FI]=Muuta näppäimistön asetuksia ja pikanäppäimiä Comment[fr]=Gérer les paramètres du clavier et les raccourcis Comment[fr_CA]=Gérer les paramètres et les raccourcis du clavier Comment[fr_FR]=Gérer les paramètres du clavier et les raccourcis Comment[gd]=Stiùirich roghainnean is ath-ghoiridean a' mheur-chlàir Comment[gl]=Administra os atallos e axustes do teclado Comment[gl_ES]=Administra os atallos e axustes do teclado Comment[hr]=Upravljajte postavkama i prečacima tipkovnice Comment[hu]=Billentyűzet beállítások és billentyűparancsok kezelése Comment[hu_HU]=Billentyűzet beállítások és billentyűparancsok kezelése Comment[ia]=Administrar le preferentias de claviero e le vias breve Comment[id]=Atur pengaturan keyboard dan shortcuts Comment[id_ID]=Atur pengaturan keyboard dan shortcuts Comment[is]=Sýsla með stillingar lyklaborðs og flýtilykla Comment[it]=Gestisci impostazioni e scorciatoie da tastiera Comment[it_CH]=Gestisci impostazioni e scorciatoie da tastiera Comment[it_IT]=Gestisci impostazioni e scorciatoie da tastiera Comment[ja]=キーボード設定・ショートカットの管理 Comment[ja_JP]=キーボード設定・ショートカットの管理 Comment[ko]=키보드 설정과 바로가기 관리 Comment[ko_KR]=키보드 설정과 바로가기 관리 Comment[lt]=Tvarkyti klaviatūros nustatymus ir sparčiuosius klavišus Comment[lt_LT]=Tvarkyti klaviatūros nustatymus ir sparčiuosius klavišus Comment[lv]=Pārvaldīt tastatūras iestatījumus un saīsnes Comment[lv_LV]=Pārvaldīt tastatūras iestatījumus un saīsnes Comment[ms]=Mengurus tetapan papan kekunci dan pintasan Comment[ms_MY]=Mengurus tetapan papan kekunci dan pintasan Comment[nb]=Håndter tastaturinnstillinger og hurtigtaster Comment[nb_NO]=Håndter tastaturinnstillinger og hurtigtaster Comment[nds]=Tastatureinstellungen und Verknüpfungen verwalten Comment[nl]=Toetsenbordinstellingen en sneltoetsen beheren Comment[nl_NL]=Toetsenbordinstellingen en sneltoetsen beheren Comment[pl]=Zarządzaj ustawieniami klawiatury i skrótami Comment[pl_PL]=Zarządzaj ustawieniami klawiatury i skrótami Comment[pt]=Geir as definições de teclado e atalhos Comment[pt_BR]=Gerenciar as configurações de teclado e atalhos Comment[pt_PT]=Geir as definições de teclado e atalhos Comment[ro]=Gestionează setările tastaturii și scurtăturile Comment[ro_RO]=Gestionează setările tastaturii și scurtăturile Comment[ru]=Управление настройками клавиатуры и горячими клавишами Comment[sk]=Spravovať nastavenia klávesnice a klávesových skratiek Comment[sk_SK]=Spravovať nastavenia klávesnice a klávesových skratiek Comment[sl]=Upravljajte z nastavitvami in bližnjicami tipkovnice Comment[sl_SI]=Upravljajte z nastavitvami in bližnjicami tipkovnice Comment[sr]=Управљање поставкама тастатуре и пречицама Comment[sr@Latn]=Управљање поставкама тастатуре и пречицама Comment[sr@ije]=Управљање поставкама тастатуре и пречицама Comment[sr@ijekavianlatin]=Управљање поставкама тастатуре и пречицама Comment[sr@latin]=Управљање поставкама тастатуре и пречицама Comment[sr_RS]=Управљање поставкама тастатуре и пречицама Comment[sr_RS@latin]=Управљање поставкама тастатуре и пречицама Comment[sv]=Hantera tangentbordsinställningar och genvägar Comment[tg]=Идоракунии миёнбурҳо ва танзимоти клавиатура Comment[th]=จัดการการตั้งค่าแป้นพิมพ์และทางลัด Comment[th_TH]=จัดการการตั้งค่าแป้นพิมพ์และทางลัด Comment[tr]=Klavye ayarlarını ve kısayollarını yönet Comment[tr_TR]=Klavye ayarlarını ve kısayollarını yönet Comment[uk]=Керування параметрами набірниці та набірничними скороченнями Comment[uk_UA]=Керування параметрами набірниці та набірничними скороченнями Comment[ur]=کیبورڈ کی ترتیبات اور شارٹ کٹ Comment[vi]=Quản lý thiết đặt bàn phím và phím tắt Comment[vi_VN]=Quản lý thiết đặt bàn phím và phím tắt Comment[zh_CN]=键盘和快捷键设置 Comment[zh_HK]=管理鍵盤設定與快速鍵 Comment[zh_TW]=管理鍵盤設定與快捷鍵組合 Keywords=keyboard;shortcut;hotkey; Keywords[am]=የፊደል ገበታ : አቋራጭ : ትኩስ ቁልፍ; Keywords[ar]=لوحة مفاتيح، اختصار ، مفتاح اختصار; Keywords[ast]=tecláu;accesu direutu;atayu; Keywords[be]=клавіятура;ярлык;гарачыя клавішы; Keywords[be@latin]=клавіятура;ярлык;гарачыя клавішы; Keywords[be_BY]=клавіятура;ярлык;гарачыя клавішы; Keywords[bg]=клавиатура;кратки пътища;бързи клавиши; Keywords[bg_BG]=клавиатура;кратки пътища;бързи клавиши; Keywords[bs]=tastatura;prečica;tipka prečice; Keywords[ca]=teclat;drecera;tecla d'accés ràpid; Keywords[ca@valencia]=teclat;atall. tecles d'accés ràpid; Keywords[ca_ES]=teclat;drecera;tecla d'accés ràpid; Keywords[ca_ES@valencia]=teclat;atall. tecles d'accés ràpid; Keywords[cs]=klávesnice;zkratky;horké klávesy; Keywords[cs_CZ]=klávesnice;zkratky;horké klávesy; Keywords[cy]=bysellfwrdd;llwybr byr;bysell boeth; Keywords[da]=tastatur;genvej;genvejstast; Keywords[da_DK]=tastatur;genvej;genvejstast; Keywords[de]=Tastatur;Tastenkombination;Schnelltaste;Tastenkürzel;shortcut;hotkey; Keywords[de_CH]=Tastatur;Tastenkombination;Schnelltaste;Tastenkürzel;shortcut;hotkey; Keywords[de_DE]=Tastatur;Tastenkombination;Schnelltaste;Tastenkürzel;shortcut;hotkey; Keywords[el]=πληκτρολόγιο;συντομεύσεις;συντόμευση; Keywords[es]=teclado;atajo. teclas de acceso rápido; Keywords[es_AR]=teclado;atajo. teclas de acceso rápido; Keywords[es_CL]=teclado;atajo. teclas de acceso rápido; Keywords[es_CO]=teclado;atajo. teclas de acceso rápido; Keywords[es_CR]=teclado;atajo. teclas de acceso rápido; Keywords[es_DO]=teclado;atajo. teclas de acceso rápido; Keywords[es_EC]=teclado;atajo. teclas de acceso rápido; Keywords[es_ES]=teclado;atajo. teclas de acceso rápido; Keywords[es_MX]=teclado;atajo. teclas de acceso rápido; Keywords[es_NI]=teclado;atajo. teclas de acceso rápido; Keywords[es_PA]=teclado;atajo. teclas de acceso rápido; Keywords[es_PE]=teclado;atajo. teclas de acceso rápido; Keywords[es_PR]=teclado;atajo. teclas de acceso rápido; Keywords[es_SV]=teclado;atajo. teclas de acceso rápido; Keywords[es_UY]=teclado;atajo. teclas de acceso rápido; Keywords[es_VE]=teclado;atajo. teclas de acceso rápido; Keywords[et]=klaviatuur;otsetee;kiirklahv; Keywords[et_EE]=klaviatuur;otsetee;kiirklahv; Keywords[eu]=teklatua;lasterbidea;laster-tekla; Keywords[fi]=näppäimistö;pikanäppäin;toimintonappi; Keywords[fi_FI]=näppäimistö;pikanäppäin;toimintonappi; Keywords[fr]=clavier;raccourci;raccourci; Keywords[fr_CA]=clavier;raccourci;raccourci clavier; Keywords[fr_FR]=clavier;raccourci;raccourci; Keywords[ga]=méarchlár;aicearra;eochair aicearra; Keywords[gd]=meur-chlàr;ath-ghoirid;keyboard;shortcut;hotkey; Keywords[gl]=teclado;atallo;acceso rápido; Keywords[gl_ES]=teclado;atallo;acceso rápido; Keywords[hr]=tipkovnica;prečac;tipka prečaca; Keywords[hu]=billentyűzet;gyorsbillentyű;gombok; Keywords[hu_HU]=billentyűzet;gyorsbillentyű;gombok; Keywords[ia]=claviero;via-breve;clave calide; Keywords[id]=papan tik;shortcut;hotkey; Keywords[id_ID]=papan tik;shortcut;hotkey; Keywords[is]=lyklaborð;flýtilykill;flýtihnappur;stytting;lyklasamsetning; Keywords[it]=tastiera;scorciatoia;hotkey; Keywords[it_CH]=tastiera;scorciatoia;hotkey; Keywords[it_IT]=tastiera;scorciatoia;hotkey; Keywords[ja]=キーボード、ショートカット、ホットキー; Keywords[ja_JP]=キーボード、ショートカット、ホットキー; Keywords[ko]=키보드;바로가기;핫 키; Keywords[ko_KR]=키보드;바로가기;핫 키; Keywords[lt]=klaviatūra;nuoroda;karštasis klavišas;spartieji klavišai;susiejimas; Keywords[lt_LT]=klaviatūra;nuoroda;karštasis klavišas;spartieji klavišai;susiejimas; Keywords[lv]=tastatūra;īsceļš;"karstais taustiņš"; Keywords[lv_LV]=tastatūra;īsceļš;"karstais taustiņš"; Keywords[ms]=papan kekunci;pintasan;kekunci panas; Keywords[ms_MY]=papan kekunci;pintasan;kekunci panas; Keywords[nb]=tastatur;snarvei;hurtigtast; Keywords[nb_NO]=tastatur;snarvei;hurtigtast; Keywords[nds]=Tastatur;Verknüpfung;Hotkey; Keywords[nl]=toetsenbord;sneltoets;actieve toets; Keywords[nl_NL]=toetsenbord;sneltoets;actieve toets; Keywords[om]=Gabateefurtuu;qaxxaamura;ariingaa; Keywords[pl]=klawiatura;skrót;skrót klawiszowy; Keywords[pl_PL]=klawiatura;skrót;skrót klawiszowy; Keywords[pt]=teclado;atalho;acelerador; Keywords[pt_BR]=teclado;atalho;tecla de atalho; Keywords[pt_PT]=teclado;atalho;acelerador; Keywords[ro]=tastatură;scurtătură;tastă rapidă; Keywords[ro_RO]=tastatură;scurtătură;tastă rapidă; Keywords[ru]=клавиатура;ярлык;горячие клавиши; Keywords[sk]=klávesnica;skratky;horúce klávesy; Keywords[sk_SK]=klávesnica;skratky;horúce klávesy; Keywords[sl]=tipkovnica;bližnjica;hitra tipka; Keywords[sl_SI]=tipkovnica;bližnjica;hitra tipka; Keywords[sr]=тастатура;пречица; Keywords[sr@Latn]=тастатура;пречица; Keywords[sr@ije]=тастатура;пречица; Keywords[sr@ijekavianlatin]=тастатура;пречица; Keywords[sr@latin]=тастатура;пречица; Keywords[sr_RS]=тастатура;пречица; Keywords[sr_RS@latin]=тастатура;пречица; Keywords[sv]=tangentbord;genväg;hotkey; Keywords[ta]=விசைப்பலகை;குறுக்குவழி;குறுக்குவிசை; Keywords[ta_LK]=விசைப்பலகை;குறுக்குவழி;குறுக்குவிசை; Keywords[tg]=клавиатура;миёнбур;тугмаи тезкор; Keywords[th]=แป้นพิมพ์;ทางลัด;ฮอตคีย์; Keywords[th_TH]=แป้นพิมพ์;ทางลัด;ฮอตคีย์; Keywords[tr]=klavye;kısayol;kısayol tuşu; Keywords[tr_TR]=klavye;kısayol;kısayol tuşu; Keywords[uk]=набірниця;лейба;гарячі клявіші; Keywords[uk_UA]=набірниця;лейба;гарячі клявіші; Keywords[ur]=کیبورڈ، شارٹ کٹ، ہاٹ کی; Keywords[vi]=bàn phím;phím tắt;phím nóng; Keywords[vi_VN]=bàn phím;phím tắt;phím nóng; Keywords[zh_CN]=keyboard;shortcut;hotkey;键盘;快捷键;热键; Keywords[zh_HK]=鍵盤;快速鍵;hotkey; Keywords[zh_TW]=鍵盤;快捷鍵組合;熱鍵; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings.desktop0000664000175000017500000002677313215735076025003 0ustar fabiofabio[Desktop Entry] Exec=cinnamon-settings Icon=preferences-system Terminal=false Type=Application Categories=Settings; StartupNotify=false OnlyShowIn=X-Cinnamon; Keywords=Preferences;Settings; Name=System Settings Name[af]=Stelsel instellings Name[am]=ስርአት ማሰናጃ Name[ar]=إعدادات النظام Name[ar_MA]=إعدادات النظام Name[ast]=Axustes del sistema Name[az]=Sistem Tənzimləmələri Name[be]=Сістэмныя налады Name[be@latin]=Сістэмныя налады Name[be_BY]=Сістэмныя налады Name[bg]=Системни настройки Name[bg_BG]=Системни настройки Name[bn]=সিস্টেম পরিচালনা Name[bn_IN]=সিস্টেম পরিচালনা Name[bs]=Sistemske postavke Name[ca]=Ajusts del sistema Name[ca@valencia]=Configuració del sistema Name[ca_ES]=Ajusts del sistema Name[ca_ES@valencia]=Configuració del sistema Name[cs]=Nastavení systému Name[cs_CZ]=Nastavení systému Name[cy]=Gosodiadau System Name[da]=Systemindstillinger Name[da_DK]=Systemindstillinger Name[de]=Systemeinstellungen Name[de@hebrew]=Systemeinstellungen Name[de_CH]=Systemeinstellungen Name[de_DE]=Systemeinstellungen Name[el]=Ρυθμίσεις Συστήματος Name[eo]=Sistemaj agordoj Name[es]=Configuración del sistema Name[es_419]=Configuración del sistema Name[es_AR]=Configuración del sistema Name[es_CL]=Configuración del sistema Name[es_CO]=Configuración del sistema Name[es_CR]=Configuración del sistema Name[es_DO]=Configuración del sistema Name[es_EC]=Configuración del sistema Name[es_ES]=Configuración del sistema Name[es_MX]=Configuración del sistema Name[es_NI]=Configuración del sistema Name[es_PA]=Configuración del sistema Name[es_PE]=Configuración del sistema Name[es_PR]=Configuración del sistema Name[es_SV]=Configuración del sistema Name[es_US]=Configuración del sistema Name[es_UY]=Configuración del sistema Name[es_VE]=Configuración del sistema Name[et]=Süsteemi seaded Name[eu]=Sistemaren ezarpenak Name[fa]=تنظیمات سیستم Name[fa_AF]=تنظیمات سیستم Name[fa_IR]=تنظیمات سیستم Name[fi]=Järjestelmäasetukset Name[fi_FI]=Järjestelmäasetukset Name[fil]=Mga Setting ng System Name[fr]=Paramètres système Name[fr_CA]=Paramètres système Name[fr_FR]=Paramètres système Name[fy]=Systeem ynstellingen Name[ga]=Socruithe Córais Name[gd]=Roghainnean an t-siostaim Name[gl]=Axustes do sistema Name[gl_ES]=Axustes do sistema Name[he]=הגדרות מערכת Name[he_IL]=הגדרות מערכת Name[hi]=सिस्टम सेटिंग्स Name[hr]=Postavke sustava Name[hu]=Rendszerbeállítások Name[hu_HU]=Rendszerbeállítások Name[hy]=Համակարգի կարգավորումները Name[ia]=Configurationes del systema Name[id]=Pengaturan Sistem Name[id_ID]=Pengaturan Sistem Name[is]=Kerfisstillingar Name[it]=Impostazioni di sistema Name[ja]=システム設定 Name[ja_JP]=システム設定 Name[jv]=seting sistem Name[ka]=სისტემის პარამეტრები Name[kab]=Iɣewwaṛen n unagraw Name[kk]=Жүйе баптаулары Name[km]=ការ​កំណត់​ប្រព័ន្ធ Name[km_KH]=ការ​កំណត់​ប្រព័ន្ធ Name[ko]=시스템 설정 Name[ko_KR]=시스템 설정 Name[ku]=Mîhengên pergalê Name[ku_IQ]=Mîhengên pergalê Name[la]=computator commuta Name[li]=Systeeminsjtellinge Name[lo]=ການຕັ້ງຄ່າລະບົບ Name[lo_LA]=ການຕັ້ງຄ່າລະບົບ Name[lt]=Sistemos nustatymai Name[lt_LT]=Sistemos nustatymai Name[lv]=Sistēmas iestatījumi Name[lv_LV]=Sistēmas iestatījumi Name[mr]=सिस्टम सेटिंग्स् Name[ms]=Tetapan Sistem Name[ms_MY]=Tetapan Sistem Name[my]=စနစ် ကနောက်ခံ Name[my_MM]=စနစ် ကနောက်ခံ Name[nap]=Settaggi d''o Sistema Name[nb]=Systeminnstillinger Name[nb_NO]=Systeminnstillinger Name[nds]=Systemeinstellungen Name[ne]=प्रणाली सेटिङ Name[nl]=Systeeminstellingen Name[nl_NL]=Systeeminstellingen Name[oc]=Paramètres del sistèma Name[om]=Qindaainoota sirnaa Name[pa]=ਸਿਸਟਮ ਸੈਟਿੰਗ Name[pl]=Ustawienia systemowe Name[pl_PL]=Ustawienia systemowe Name[pt]=Definições do sistema Name[pt_BR]=Configurações do sistema Name[pt_PT]=Definições do sistema Name[ro]=Setări sistem Name[ro_RO]=Setări sistem Name[ru]=Параметры системы Name[sc]=Sèberos de Sistema Name[si]=පද්ධති සැකසුම් Name[sk]=Systémové nastavenia Name[sk_SK]=Systémové nastavenia Name[sl]=Sistemske nastavitve Name[sl_SI]=Sistemske nastavitve Name[sq]=Parametrat e sistemit Name[sr]=Подешавања система Name[sr@Latn]=Подешавања система Name[sr@ije]=Подешавања система Name[sr@ijekavianlatin]=Подешавања система Name[sr@latin]=Подешавања система Name[sr_RS]=Подешавања система Name[sr_RS@latin]=Подешавања система Name[sv]=Systeminställningar Name[ta]=கணினி அமைப்புகள் Name[ta_LK]=கணினி அமைப்புகள் Name[tg]=Танзимоти система Name[th]=ค่าตั้งระบบ Name[th_TH]=ค่าตั้งระบบ Name[tl]=Mga Settings ukol sa Sistema Name[tr]=Sistem Ayarları Name[tr_TR]=Sistem Ayarları Name[ug]=سىستېما تەڭشىكى Name[uk]=Системні налаштування Name[uk_UA]=Системні налаштування Name[ur]=سسٹم کی ترتیبات Name[ur_PK]=سسٹم کی ترتیبات Name[uz]=Тизим созламалари Name[uz@Latn]=Тизим созламалари Name[uz@cyrillic]=Тизим созламалари Name[vi]=Thiết lập Hệ thống Name[vi_VN]=Thiết lập Hệ thống Name[zh_CN]=系统设置 Name[zh_HK]=系統設定 Name[zh_TW]=系統設定 Comment=Control Center Comment[af]=Kontrole sentrum Comment[am]=መቆጣጠሪያ ማእከል Comment[ar]=مركز التحكم Comment[ar_MA]=مركز التحكم Comment[ast]=Centru de control Comment[az]=İdarə Mərkəzi Comment[be]=Цэнтр кіравання Comment[be@latin]=Цэнтр кіравання Comment[be_BY]=Цэнтр кіравання Comment[bg]=Контролен център Comment[bg_BG]=Контролен център Comment[bn]=নিয়ন্ত্রণ কেন্দ্র Comment[bn_IN]=নিয়ন্ত্রণ কেন্দ্র Comment[bs]=Upravljački centar Comment[ca]=Centre de control Comment[ca@valencia]=Centre de control Comment[ca_ES]=Centre de control Comment[ca_ES@valencia]=Centre de control Comment[cs]=Ovládací panely Comment[cs_CZ]=Ovládací panely Comment[cy]=Canolfan Rheoli Comment[da]=Kontrolcenter Comment[da_DK]=Kontrolcenter Comment[de]=Steuerzentrale Comment[de@hebrew]=Steuerzentrale Comment[de_CH]=Steuerzentrale Comment[de_DE]=Steuerzentrale Comment[el]=Κέντρο Ελέγχου Comment[en_CA]=Control Centre Comment[en_GB]=Control Centre Comment[eo]=Stircentro Comment[es]=Centro de control Comment[es_419]=Centro de control Comment[es_AR]=Centro de control Comment[es_CL]=Centro de control Comment[es_CO]=Centro de control Comment[es_CR]=Centro de control Comment[es_DO]=Centro de control Comment[es_EC]=Centro de control Comment[es_ES]=Centro de control Comment[es_MX]=Centro de control Comment[es_NI]=Centro de control Comment[es_PA]=Centro de control Comment[es_PE]=Centro de control Comment[es_PR]=Centro de control Comment[es_SV]=Centro de control Comment[es_US]=Centro de control Comment[es_UY]=Centro de control Comment[es_VE]=Centro de control Comment[et]=Juhtimiskeskus Comment[eu]=Kontrolgunea Comment[fa]=مرکز کنترل Comment[fa_AF]=مرکز کنترل Comment[fa_IR]=مرکز کنترل Comment[fi]=Ohjauskeskus Comment[fi_FI]=Ohjauskeskus Comment[fil]=Kontrol Senter Comment[fo]=Stýris-miðdepil Comment[fr]=Centre de Contrôle Comment[fr_CA]=Centre de Contrôle Comment[fr_FR]=Centre de Contrôle Comment[fy]=Behear Sintrum Comment[ga]=Lárionad Rialaithe Comment[gd]=An t-ionad smachd Comment[gl]=Centro de control Comment[gl_ES]=Centro de control Comment[he]=מרכז הבקרה Comment[he_IL]=מרכז הבקרה Comment[hi]=कन्ट्रोल सेन्टर Comment[hr]=Upravljačko središte Comment[hu]=Vezérlőpult Comment[hu_HU]=Vezérlőpult Comment[hy]=Կառավարման կենտրոն Comment[ia]=Pannello de controlo Comment[id]=Pusat Kendali Comment[id_ID]=Pusat Kendali Comment[is]=Stjórnborð Comment[it]=Centro di controllo Comment[ja]=コントロールセンター Comment[ja_JP]=コントロールセンター Comment[jv]=Pusate ngengatur Comment[ka]=მართვის ცენტრი Comment[kab]=Amas n wenzaḍ Comment[kk]=Басқару орталығы Comment[km]=មជ្ឈមណ្ឌល​បញ្ជា Comment[km_KH]=មជ្ឈមណ្ឌល​បញ្ជា Comment[ko]=제어판 Comment[ko_KR]=제어판 Comment[ku]=Navenda Kontrolê Comment[ku_IQ]=Navenda Kontrolê Comment[li]=Configurasiesjerm Comment[lo]=ສູນຄວບຄຸມ Comment[lo_LA]=ສູນຄວບຄຸມ Comment[lt]=Valdymo centras Comment[lt_LT]=Valdymo centras Comment[lv]=Vadības centrs Comment[lv_LV]=Vadības centrs Comment[mr]=नियंत्रण केंद्र Comment[ms]=Pusat Kawalan Comment[ms_MY]=Pusat Kawalan Comment[my]=ထိန်းချုပ်ရေး စင်တာ Comment[my_MM]=ထိန်းချုပ်ရေး စင်တာ Comment[nap]=Centro 'e cuntroll' Comment[nb]=Kontrollsenter Comment[nb_NO]=Kontrollsenter Comment[nds]=Kontrollzentrum Comment[ne]=नियन्त्रण केन्द्र Comment[nl]=Configuratiecentrum Comment[nl_NL]=Configuratiecentrum Comment[oc]=Centre de contraròtle Comment[om]=Wiirtuu to'annaa Comment[pa]=ਕੰਟਰੋਲ ਸੈਂਟਰ Comment[pl]=Centrum sterowania Comment[pl_PL]=Centrum sterowania Comment[pt]=Centro de controlo Comment[pt_BR]=Centro de Controle Comment[pt_PT]=Centro de controlo Comment[ro]=Centru de control Comment[ro_RO]=Centru de control Comment[ru]=Центр управления Comment[sc]=Tzentru de Controllu Comment[si]=පාලන මධ්‍යස්ථානය Comment[sk]=Centrum ovládania Comment[sk_SK]=Centrum ovládania Comment[sl]=Nadzorno središče Comment[sl_SI]=Nadzorno središče Comment[sq]=Qendra e kontrollit Comment[sr]=Управљачки центар Comment[sr@Latn]=Управљачки центар Comment[sr@ije]=Управљачки центар Comment[sr@ijekavianlatin]=Управљачки центар Comment[sr@latin]=Управљачки центар Comment[sr_RS]=Управљачки центар Comment[sr_RS@latin]=Управљачки центар Comment[sv]=Kontrollcenter Comment[ta]=கட்டுப்பாட்டு மையம் Comment[ta_LK]=கட்டுப்பாட்டு மையம் Comment[tg]=Маркази идоракунӣ Comment[th]=ศูนย์ควบคุม Comment[th_TH]=ศูนย์ควบคุม Comment[tl]=Sentro ng Kontrol Comment[tr]=Cinnamon Denetim Merkezi Comment[tr_TR]=Cinnamon Denetim Merkezi Comment[ug]=باشقۇرۇش مەركىزى Comment[uk]=Центр керування Comment[uk_UA]=Центр керування Comment[ur]=کنڑول مرکز Comment[ur_PK]=کنڑول مرکز Comment[uz]=Назорат маркази Comment[uz@Latn]=Назорат маркази Comment[uz@cyrillic]=Назорат маркази Comment[vi]=Trung tâm Điều khiển Comment[vi_VN]=Trung tâm Điều khiển Comment[zh_CN]=控制中心 Comment[zh_HK]=控制中心 Comment[zh_TW]=控制中心 Cinnamon-3.6.7/files/usr/share/applications/cinnamon-menu-editor.desktop0000664000175000017500000000042013215735076025350 0ustar fabiofabio[Desktop Entry] Name=Cinnamon Menu Editor Comment=Edit the entries of the Cinnamon menu applet Exec=cinnamon-menu-editor Icon=alacarte OnlyShowIn=X-Cinnamon; Terminal=false Type=Application NoDisplay=true Categories=GNOME;GTK;Settings;DesktopSettings; StartupNotify=false Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-general.desktop0000664000175000017500000002544213215735076026406 0ustar fabiofabio[Desktop Entry] Icon=cs-general Exec=cinnamon-settings general Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=General Name[am]=ባጠቃላይ Name[ar]=عام Name[ast]=Xeneral Name[be]=Агульны Name[be@latin]=Агульны Name[be_BY]=Агульны Name[bg]=Общи Name[bg_BG]=Общи Name[bs]=Opšte Name[cs]=Obecné Name[cs_CZ]=Obecné Name[cy]=Cyffredinol Name[da]=Generelt Name[da_DK]=Generelt Name[de]=Allgemein Name[de_CH]=Allgemein Name[de_DE]=Allgemein Name[el]=Γενικές Ρυθμίσεις Name[eo]=Ĝenerala Name[et]=Üldine Name[et_EE]=Üldine Name[eu]=Orokorra Name[fa]=عمومی Name[fa_AF]=عمومی Name[fa_IR]=عمومی Name[fi]=Yleinen Name[fi_FI]=Yleinen Name[fr]=Général Name[fr_CA]=Général Name[fr_FR]=Général Name[ga]=Ginearálta Name[gd]=Coitcheann Name[gl]=Xeral Name[gl_ES]=Xeral Name[hr]=Općenito Name[hu]=Általános Name[hu_HU]=Általános Name[id]=Umum Name[id_ID]=Umum Name[is]=Almennt Name[it]=Generali Name[it_CH]=Generali Name[it_IT]=Generali Name[ja]=一般 Name[ja_JP]=一般 Name[kab]=Amatu Name[ko]=일반 Name[ko_KR]=일반 Name[lo]=ທົ່ວໄປ Name[lo_LA]=ທົ່ວໄປ Name[lt]=Bendra Name[lt_LT]=Bendra Name[lv]=Vispārīgi Name[lv_LV]=Vispārīgi Name[ms]=Am Name[ms_MY]=Am Name[nb]=Generelt Name[nb_NO]=Generelt Name[nds]=Allgemein Name[nl]=Algemeen Name[nl_NL]=Algemeen Name[om]=Waliigala Name[pa]=ਸਧਾਰਨ Name[pl]=Ogólne Name[pl_PL]=Ogólne Name[pt]=Geral Name[pt_BR]=Geral Name[pt_PT]=Geral Name[ru]=Общие Name[sk]=Všeobecné Name[sk_SK]=Všeobecné Name[sl]=Splošno Name[sl_SI]=Splošno Name[sq]=Të përgjithshme Name[sr]=Опште Name[sr@Latn]=Опште Name[sr@ije]=Опште Name[sr@ijekavianlatin]=Опште Name[sr@latin]=Опште Name[sr_RS]=Опште Name[sr_RS@latin]=Опште Name[sv]=Allmänt Name[ta]=பொது Name[ta_LK]=பொது Name[tg]=Умумӣ Name[th]=ทั่วไป Name[th_TH]=ทั่วไป Name[tr]=Genel Name[tr_TR]=Genel Name[uk]=Загальні Name[uk_UA]=Загальні Name[ur]=عمومی Name[vi]=Tổng quát Name[vi_VN]=Tổng quát Name[zh_CN]=常规 Name[zh_HK]=一般 Name[zh_TW]=一般 Comment=Miscellaneous Cinnamon preferences Comment[am]=የተለያዩ የ ሲናሞን ምርጫዎች Comment[ar]=تفضيلات أخرى لـ: سينامُن Comment[be]=Розныя налады Cinnamon Comment[be@latin]=Розныя налады Cinnamon Comment[be_BY]=Розныя налады Cinnamon Comment[bg]=Други настройки на Cinnamon Comment[bg_BG]=Други настройки на Cinnamon Comment[bs]=Razne Cinnamon postavke Comment[ca]=Preferències diverses de Cinnamon Comment[ca@valencia]=Preferències diverses de Cinnamon Comment[ca_ES]=Preferències diverses de Cinnamon Comment[ca_ES@valencia]=Preferències diverses de Cinnamon Comment[cs]=Ostatní nastavení Cinnamonu Comment[cs_CZ]=Ostatní nastavení Cinnamonu Comment[cy]=Dewisiadau amrywiol Cinnamon Comment[da]=Diverse Cinnamon-indstillinger Comment[da_DK]=Diverse Cinnamon-indstillinger Comment[de]=Verschiedene Cinnamon-Einstellungen Comment[de_CH]=Verschiedene Cinnamon-Einstellungen Comment[de_DE]=Verschiedene Cinnamon-Einstellungen Comment[el]=Διάφορες προτιμήσεις του Cinnamon Comment[es]=Preferencias diversas de Cinnamon Comment[es_AR]=Preferencias diversas de Cinnamon Comment[es_CL]=Preferencias diversas de Cinnamon Comment[es_CO]=Preferencias diversas de Cinnamon Comment[es_CR]=Preferencias diversas de Cinnamon Comment[es_DO]=Preferencias diversas de Cinnamon Comment[es_EC]=Preferencias diversas de Cinnamon Comment[es_ES]=Preferencias diversas de Cinnamon Comment[es_MX]=Preferencias diversas de Cinnamon Comment[es_NI]=Preferencias diversas de Cinnamon Comment[es_PA]=Preferencias diversas de Cinnamon Comment[es_PE]=Preferencias diversas de Cinnamon Comment[es_PR]=Preferencias diversas de Cinnamon Comment[es_SV]=Preferencias diversas de Cinnamon Comment[es_UY]=Preferencias diversas de Cinnamon Comment[es_VE]=Preferencias diversas de Cinnamon Comment[eu]=Askotariko Cinnamon hobespenak Comment[fa]=گزینه‌های گوناگون سینمون Comment[fa_AF]=گزینه‌های گوناگون سینمون Comment[fa_IR]=گزینه‌های گوناگون سینمون Comment[fi]=Sekalaisia Cinnamonin asetuksia Comment[fi_FI]=Sekalaisia Cinnamonin asetuksia Comment[fr]=Préférences diverses de Cinnamon Comment[fr_CA]=Autres préférences pour Cinnamon Comment[fr_FR]=Préférences diverses de Cinnamon Comment[gd]=Measgachadh de roghainnean Cinnamon Comment[gl]=Preferencias variadas para Cinnamon Comment[gl_ES]=Preferencias variadas para Cinnamon Comment[hr]=Ostale Cinnamon osobitosti Comment[hu]=Egyéb Cinnamon beállítások Comment[hu_HU]=Egyéb Cinnamon beállítások Comment[ia]=Preferentias miscellanee de Cinnamon Comment[id]=Macam-macam preferensi Cinnamon Comment[id_ID]=Macam-macam preferensi Cinnamon Comment[is]=Ýmsar stillingar fyrir Cinnamon Comment[it]=Preferenze varie di Cinnamon Comment[it_CH]=Preferenze varie di Cinnamon Comment[it_IT]=Preferenze varie di Cinnamon Comment[ja]=その他 Cinnamon 設定オプション Comment[ja_JP]=その他 Cinnamon 設定オプション Comment[ko]=그밖의 시나몬설정 Comment[ko_KR]=그밖의 시나몬설정 Comment[lt]=Kitos Cinnamon nuostatos Comment[lt_LT]=Kitos Cinnamon nuostatos Comment[lv]=Dažādi Cinnamon iestatījumi Comment[lv_LV]=Dažādi Cinnamon iestatījumi Comment[ms]=Pilihan Cinnamon pelbagai Comment[ms_MY]=Pilihan Cinnamon pelbagai Comment[nb]=Diverse innstillinger for Cinnamon Comment[nb_NO]=Diverse innstillinger for Cinnamon Comment[nds]=Sonstige Cinnamon-Einstellungen Comment[nl]=Verschillende Cinnamonvoorkeuren Comment[nl_NL]=Verschillende Cinnamonvoorkeuren Comment[oc]=Preferéncias divèrsas de Cinnamon Comment[pl]=Różne preferencje Cinnamona Comment[pl_PL]=Różne preferencje Cinnamona Comment[pt]=Preferências diversas do Cinnamon Comment[pt_BR]=Preferências diversas do Cinnamon Comment[pt_PT]=Preferências diversas do Cinnamon Comment[ro]=Alte preferințe Cinnamon Comment[ro_RO]=Alte preferințe Cinnamon Comment[ru]=Различные настройки Cinnamon Comment[sk]=Rôzne predvoľby Cinnamon Comment[sk_SK]=Rôzne predvoľby Cinnamon Comment[sl]=Razne možnosti Cinnamona Comment[sl_SI]=Razne možnosti Cinnamona Comment[sq]=Parapëlqime të përziera të Cinnamon Comment[sr]=Разне поставке Цимета Comment[sr@Latn]=Разне поставке Цимета Comment[sr@ije]=Разне поставке Цимета Comment[sr@ijekavianlatin]=Разне поставке Цимета Comment[sr@latin]=Разне поставке Цимета Comment[sr_RS]=Разне поставке Цимета Comment[sr_RS@latin]=Разне поставке Цимета Comment[sv]=Diverse inställningar för Cinnamon Comment[tg]=Хусусиятҳои гуногун дар Cinnamon Comment[th]=การตั้งค่าเบ็ดเตล็ด Cinnamon ขั้นสูง Comment[th_TH]=การตั้งค่าเบ็ดเตล็ด Cinnamon ขั้นสูง Comment[tr]=Muhtelif Cinnamon seçenekleri Comment[tr_TR]=Muhtelif Cinnamon seçenekleri Comment[uk]=Різні параметри Cinnamon Comment[uk_UA]=Різні параметри Cinnamon Comment[ur]=متفرق، سنامون کی ترجیحات Comment[vi]=Tuỳ thích Cinnamon linh tinh Comment[vi_VN]=Tuỳ thích Cinnamon linh tinh Comment[zh_CN]=其他Cinnamon偏好设置 Comment[zh_HK]=Cinnamon 雜項喜好設定 Comment[zh_TW]=其他 Cinnamon 偏好設定 Keywords=logging;click; Keywords[ar]=ولوج، نقر; Keywords[bg]=вписване;клик; Keywords[bg_BG]=вписване;клик; Keywords[ca]=registrant;clic; Keywords[ca@valencia]=identificar-se;clic; Keywords[ca_ES]=registrant;clic; Keywords[ca_ES@valencia]=identificar-se;clic; Keywords[cs]=přihlašování;klepnutí; Keywords[cs_CZ]=přihlašování;klepnutí; Keywords[cy]=mewngofnodi;clic; Keywords[da]=logning;klik; Keywords[da_DK]=logning;klik; Keywords[de]=Protokollierung;Klick; Keywords[de_CH]=Protokollierung;Klick; Keywords[de_DE]=Protokollierung;Klick; Keywords[el]=καταγραφή;κλικ; Keywords[es]=identificarse;click; Keywords[es_AR]=identificarse;click; Keywords[es_CL]=identificarse;click; Keywords[es_CO]=identificarse;click; Keywords[es_CR]=identificarse;click; Keywords[es_DO]=identificarse;click; Keywords[es_EC]=identificarse;click; Keywords[es_ES]=identificarse;click; Keywords[es_MX]=identificarse;click; Keywords[es_NI]=identificarse;click; Keywords[es_PA]=identificarse;click; Keywords[es_PE]=identificarse;click; Keywords[es_PR]=identificarse;click; Keywords[es_SV]=identificarse;click; Keywords[es_UY]=identificarse;click; Keywords[es_VE]=identificarse;click; Keywords[eu]=saioa-hastea;klik; Keywords[fi]=loki;klikkaaminen; Keywords[fi_FI]=loki;klikkaaminen; Keywords[fil]=Nirerehistro;klik; Keywords[fr]=journalisation;clic; Keywords[fr_CA]=journalisation;clic; Keywords[fr_FR]=journalisation;clic; Keywords[gd]=logging;click;logadh;briog; Keywords[gl]=acceso;premer; Keywords[gl_ES]=acceso;premer; Keywords[hr]=prijava;klik; Keywords[hu]=naplózás;kattintás; Keywords[hu_HU]=naplózás;kattintás; Keywords[ia]=connexion;clic; Keywords[id]=logging;klik; Keywords[id_ID]=logging;klik; Keywords[is]=annáll;smella; Keywords[ko]=로그 기록하기;클릭; Keywords[ko_KR]=로그 기록하기;클릭; Keywords[lt]=registravimas;spustelėjimas; Keywords[lt_LT]=registravimas;spustelėjimas; Keywords[ms]=mengelog;klik; Keywords[ms_MY]=mengelog;klik; Keywords[nb]=logging;klikk; Keywords[nb_NO]=logging;klikk; Keywords[nds]=Protokollieren;Klicken; Keywords[nl]=logboek bijhouden;klik; Keywords[nl_NL]=logboek bijhouden;klik; Keywords[pl]=logowanie;klik; Keywords[pl_PL]=logowanie;klik; Keywords[pt]=registo;carregue em; Keywords[pt_BR]=resgistrando;clique; Keywords[pt_PT]=registo;carregue em; Keywords[ro]=jurnalizare;clic; Keywords[ro_RO]=jurnalizare;clic; Keywords[ru]=вход в систему;клик; Keywords[sk]=prihlasovanie;kliknutie; Keywords[sk_SK]=prihlasovanie;kliknutie; Keywords[sl]=beleženje;klik; Keywords[sl_SI]=beleženje;klik; Keywords[sr]=пријава;клик; Keywords[sr@Latn]=пријава;клик; Keywords[sr@ije]=пријава;клик; Keywords[sr@ijekavianlatin]=пријава;клик; Keywords[sr@latin]=пријава;клик; Keywords[sr_RS]=пријава;клик; Keywords[sr_RS@latin]=пријава;клик; Keywords[sv]=loggning;klick; Keywords[th]=บันทึก;คลิก; Keywords[th_TH]=บันทึก;คลิก; Keywords[tr]=günlük kaydı;tıkla; Keywords[tr_TR]=günlük kaydı;tıkla; Keywords[uk]=Увійти;натисніть; Keywords[uk_UA]=Увійти;натисніть; Keywords[ur]=لاگنگ، کلک; Keywords[vi]=ghi nhật trình;nhấp; Keywords[vi_VN]=ghi nhật trình;nhấp; Keywords[zh_CN]=日志记录,点击; Keywords[zh_HK]=記錄;點選; Keywords[zh_TW]=記錄;點擊; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-info.desktop0000664000175000017500000004713513215735076025727 0ustar fabiofabio[Desktop Entry] Icon=cs-details Exec=cinnamon-settings info Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=System Info Name[am]=የስርአት መረጃ Name[ar]=معلومات النظام Name[ast]=Información del sistema Name[be]=Сістэмная інфармацыя Name[be@latin]=Сістэмная інфармацыя Name[be_BY]=Сістэмная інфармацыя Name[bg]=Информация за системата Name[bg_BG]=Информация за системата Name[bs]=Informacije o sistemu Name[ca]=Informació del sistema Name[ca@valencia]=Informació del sistema Name[ca_ES]=Informació del sistema Name[ca_ES@valencia]=Informació del sistema Name[cs]=Systémové informace Name[cs_CZ]=Systémové informace Name[cy]=Gwybodaeth System Name[da]=Systemoplysninger Name[da_DK]=Systemoplysninger Name[de]=Systeminformation Name[de_CH]=Systeminformation Name[de_DE]=Systeminformation Name[el]=Πληροφορίες συστήματος Name[eo]=Sisteminformoj Name[es]=Información del sistema Name[es_AR]=Información del sistema Name[es_CL]=Información del sistema Name[es_CO]=Información del sistema Name[es_CR]=Información del sistema Name[es_DO]=Información del sistema Name[es_EC]=Información del sistema Name[es_ES]=Información del sistema Name[es_MX]=Información del sistema Name[es_NI]=Información del sistema Name[es_PA]=Información del sistema Name[es_PE]=Información del sistema Name[es_PR]=Información del sistema Name[es_SV]=Información del sistema Name[es_UY]=Información del sistema Name[es_VE]=Información del sistema Name[et]=Süsteemi info Name[et_EE]=Süsteemi info Name[eu]=Sistemaren informazioa Name[fi]=Järjestelmätiedot Name[fi_FI]=Järjestelmätiedot Name[fr]=Information système Name[fr_CA]=Information système Name[fr_FR]=Information système Name[ga]=Faisnéis Córais Name[gd]=Fiosrachadh mun t-siostam Name[gl]=Información do sistema Name[gl_ES]=Información do sistema Name[hr]=Informacije sustava Name[hu]=Rendszerinformációk Name[hu_HU]=Rendszerinformációk Name[ia]=Informationes de systema Name[id]=Informasi Sistem Name[id_ID]=Informasi Sistem Name[is]=Kerfisupplýsingar Name[it]=Informazioni di sistema Name[it_CH]=Informazioni di sistema Name[it_IT]=Informazioni di sistema Name[ja]=システム情報 Name[ja_JP]=システム情報 Name[kab]=Talɣut ɣef unagraw Name[ko]=시스템 정보 Name[ko_KR]=시스템 정보 Name[lo]=ຂໍ້ມູນລະບົບ Name[lo_LA]=ຂໍ້ມູນລະບົບ Name[lt]=Sistemos informacija Name[lt_LT]=Sistemos informacija Name[lv]=Sistēmas informācija Name[lv_LV]=Sistēmas informācija Name[ms]=Maklumat Sistem Name[ms_MY]=Maklumat Sistem Name[nb]=Systeminformasjon Name[nb_NO]=Systeminformasjon Name[nds]=Systeminformationen Name[nl]=Systeeminformatie Name[nl_NL]=Systeeminformatie Name[oc]=Informacions sul sistèma Name[om]=Odeeffanoo sirnaa Name[pa]=ਸਿਸਟਮ ਜਾਣਕਾਰੀ Name[pl]=Informacje o systemie Name[pl_PL]=Informacje o systemie Name[pt]=Informações do sistema Name[pt_BR]=Informações do Sistema Name[pt_PT]=Informações do sistema Name[ro]=Informații sistem Name[ro_RO]=Informații sistem Name[ru]=О системе Name[sk]=Systémové informácie Name[sk_SK]=Systémové informácie Name[sl]=Sistemski podatki Name[sl_SI]=Sistemski podatki Name[sq]=Informacione mbi sistemin Name[sr]=Подаци о систему Name[sr@Latn]=Подаци о систему Name[sr@ije]=Подаци о систему Name[sr@ijekavianlatin]=Подаци о систему Name[sr@latin]=Подаци о систему Name[sr_RS]=Подаци о систему Name[sr_RS@latin]=Подаци о систему Name[sv]=Systeminformation Name[ta]=கணினி தகவல் Name[ta_LK]=கணினி தகவல் Name[tg]=Иттилооти система Name[th]=ข้อมูลระบบ Name[th_TH]=ข้อมูลระบบ Name[tr]=Sistem Bilgisi Name[tr_TR]=Sistem Bilgisi Name[uk]=Інформація про систему Name[uk_UA]=Інформація про систему Name[ur]=سسٹم معلومات Name[vi]=Thông tin Hệ thống Name[vi_VN]=Thông tin Hệ thống Name[zh_CN]=系统信息 Name[zh_HK]=系統資訊 Name[zh_TW]=系統資訊 Comment=Display system information Comment[am]=የ ስርአቱን መረጃ ማሳያ Comment[ar]=إظهار معلومات النظام Comment[be]=Паказаць сістэмная інфармацыю Comment[be@latin]=Паказаць сістэмная інфармацыю Comment[be_BY]=Паказаць сістэмная інфармацыю Comment[bg]=Показване на данни за системата Comment[bg_BG]=Показване на данни за системата Comment[bs]=Prikaži informacije o sistemu Comment[ca]=Mostrar Informació del sistema Comment[ca@valencia]=Mostra la informació del sistema Comment[ca_ES]=Mostrar Informació del sistema Comment[ca_ES@valencia]=Mostra la informació del sistema Comment[cs]=Zobrazit systémové informace Comment[cs_CZ]=Zobrazit systémové informace Comment[cy]=Dangos gwybodaeth system Comment[da]=Vis systeminformation Comment[da_DK]=Vis systeminformation Comment[de]=Systeminformationen anzeigen Comment[de_CH]=Systeminformationen anzeigen Comment[de_DE]=Systeminformationen anzeigen Comment[el]=Προβολή πληροφοριών για τον υπολογιστή Comment[es]=Mostrar información del sistema Comment[es_AR]=Mostrar información del sistema Comment[es_CL]=Mostrar información del sistema Comment[es_CO]=Mostrar información del sistema Comment[es_CR]=Mostrar información del sistema Comment[es_DO]=Mostrar información del sistema Comment[es_EC]=Mostrar información del sistema Comment[es_ES]=Mostrar información del sistema Comment[es_MX]=Mostrar información del sistema Comment[es_NI]=Mostrar información del sistema Comment[es_PA]=Mostrar información del sistema Comment[es_PE]=Mostrar información del sistema Comment[es_PR]=Mostrar información del sistema Comment[es_SV]=Mostrar información del sistema Comment[es_UY]=Mostrar información del sistema Comment[es_VE]=Mostrar información del sistema Comment[et]=Süsteemi teabe näitamine Comment[et_EE]=Süsteemi teabe näitamine Comment[eu]=Bistaratu sistemaren informazioa Comment[fi]=Näytä järjestelmätiedot Comment[fi_FI]=Näytä järjestelmätiedot Comment[fr]=Afficher les informations du système Comment[fr_CA]=Afficher les informations du système Comment[fr_FR]=Afficher les informations du système Comment[gd]=Seall fiosrachadh mun t-siostam Comment[gl]=Amosar a información do sistema Comment[gl_ES]=Amosar a información do sistema Comment[hr]=Prikaži informacije sustava Comment[hu]=Rendszerinformációk megjelenítése Comment[hu_HU]=Rendszerinformációk megjelenítése Comment[ia]=Monstrar le informationes de systema Comment[id]=Tampilkan informasi sistem Comment[id_ID]=Tampilkan informasi sistem Comment[is]=Birta upplýsingar um kerfið Comment[it]=Visualizza le informazioni di sistema Comment[it_CH]=Visualizza le informazioni di sistema Comment[it_IT]=Visualizza le informazioni di sistema Comment[ja]=システム情報を表示 Comment[ja_JP]=システム情報を表示 Comment[kab]=Sken talɣut ɣef unagraw Comment[ko]=시스템 정보 표시 Comment[ko_KR]=시스템 정보 표시 Comment[lo]=ສະແດງຂໍ້ມູນກ່ຽວກັບລະບົບ Comment[lo_LA]=ສະແດງຂໍ້ມູນກ່ຽວກັບລະບົບ Comment[lt]=Rodyti sistemos informaciją Comment[lt_LT]=Rodyti sistemos informaciją Comment[lv]=Attēlot sistēmas informāciju Comment[lv_LV]=Attēlot sistēmas informāciju Comment[ms]=Papar maklumat sistem Comment[ms_MY]=Papar maklumat sistem Comment[nb]=Vis systeminformasjon Comment[nb_NO]=Vis systeminformasjon Comment[nds]=Systeminformationen anzeigen Comment[nl]=Systeeminformatie weergeven Comment[nl_NL]=Systeeminformatie weergeven Comment[oc]=Afichar las informacions del sistèma Comment[pl]=Wyświetlaj informacje systemowe Comment[pl_PL]=Wyświetlaj informacje systemowe Comment[pt]=Mostrar a informação do sistema Comment[pt_BR]=Exibir informações do sistema Comment[pt_PT]=Mostrar a informação do sistema Comment[ro]=Arată informații despre sistem Comment[ro_RO]=Arată informații despre sistem Comment[ru]=Отображать информацию о системе Comment[sk]=Zobraziť systémové informácie Comment[sk_SK]=Zobraziť systémové informácie Comment[sl]=Prikaži podrobnosti sistema Comment[sl_SI]=Prikaži podrobnosti sistema Comment[sq]=Shfaq informacione mbi sistemin Comment[sr]=Прикажи податке о систему Comment[sr@Latn]=Прикажи податке о систему Comment[sr@ije]=Прикажи податке о систему Comment[sr@ijekavianlatin]=Прикажи податке о систему Comment[sr@latin]=Прикажи податке о систему Comment[sr_RS]=Прикажи податке о систему Comment[sr_RS@latin]=Прикажи податке о систему Comment[sv]=Visa systeminformation Comment[tg]=Намоиш додани иттилооти система Comment[th]=แสดงข้อมูลระบบ Comment[th_TH]=แสดงข้อมูลระบบ Comment[tr]=Sistem bilgisini göster Comment[tr_TR]=Sistem bilgisini göster Comment[uk]=Показати системну інформацію Comment[uk_UA]=Показати системну інформацію Comment[ur]=سسٹم معلومات دکھائیں Comment[vi]=Hiển thị thông tin hệ thống Comment[vi_VN]=Hiển thị thông tin hệ thống Comment[zh_CN]=显示系统信息 Comment[zh_HK]=顯示系統資訊 Comment[zh_TW]=顯示系統資訊 Keywords=system;information;details;graphic;sound;kernel;version; Keywords[am]=ስርአት : መረጃ : ዝርዝር : ንድፍ : ድምፅ : kernel;እትም; Keywords[ar]=النظام، معلومات، تفاصيل، عرض، صوت، النواة، الإصدار; Keywords[ast]=sistema;información;gráficu;soníu;kernel;versión; Keywords[be]=сістэма;інфармацыя;падрабязнасці;графіка;гук;ядро;версія; Keywords[be@latin]=сістэма;інфармацыя;падрабязнасці;графіка;гук;ядро;версія; Keywords[be_BY]=сістэма;інфармацыя;падрабязнасці;графіка;гук;ядро;версія; Keywords[bg]=система;информация;детайли;графика;звук;ядро;версия; Keywords[bg_BG]=система;информация;детайли;графика;звук;ядро;версия; Keywords[bs]=sistem;informacije;detalji;grafika;zvuk;kernel;verzija; Keywords[ca]=sistema;informació;detalls;gràfics;so;nucli;versió; Keywords[ca@valencia]=sistema;informació;detalls;gràfics;so;nucli;versió; Keywords[ca_ES]=sistema;informació;detalls;gràfics;so;nucli;versió; Keywords[ca_ES@valencia]=sistema;informació;detalls;gràfics;so;nucli;versió; Keywords[cs]=system;informace;detaily;grafika;hudba;jádro;verze; Keywords[cs_CZ]=system;informace;detaily;grafika;hudba;jádro;verze; Keywords[cy]=system;gwybodaeth;manylion;graffigau;sain;cnewyllyn;fersiwn; Keywords[da]=system;information;detaljer;grafik;lyd;kerne;version; Keywords[da_DK]=system;information;detaljer;grafik;lyd;kerne;version; Keywords[de]=System;Informationen;Details;Grafik;Sound-Karte;Kernel;Version; Keywords[de_CH]=System;Informationen;Details;Grafik;Sound-Karte;Kernel;Version; Keywords[de_DE]=System;Informationen;Details;Grafik;Sound-Karte;Kernel;Version; Keywords[el]=σύστημα;πληροφορίες;λεπτομέρειες;γραφικά;ήχος;πυρήνας;έκδοση; Keywords[es]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_AR]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_CL]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_CO]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_CR]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_DO]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_EC]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_ES]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_MX]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_NI]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_PA]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_PE]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_PR]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_SV]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_UY]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[es_VE]=sistema;información;detalles;gráficos;sonido;nucleo;versión; Keywords[et]=süsteem;info;detailid;graafika;heli;kernel;versioon; Keywords[et_EE]=süsteem;info;detailid;graafika;heli;kernel;versioon; Keywords[eu]=sistema;informazioa;xehetasunak;grafikoak;soinua;kernela;bertsioa; Keywords[fi]=järjestelmä;tietoja;yksityiskohdat;grafiikka;ääni;ydin;versio; Keywords[fi_FI]=järjestelmä;tietoja;yksityiskohdat;grafiikka;ääni;ydin;versio; Keywords[fr]=système;information;détails;graphique;son;noyau;version; Keywords[fr_CA]=système;information;détails;graphique;son;noyau;version; Keywords[fr_FR]=système;information;détails;graphique;son;noyau;version; Keywords[ga]=córas;eolas;sonraí;grafach;fuaim;eithne;leagan; Keywords[gd]=siostam;fiosrachadh;mion-fhiosrachadh;grafaigeach;fuaim;eitean;tionndadh;system;information;details;graphic;sound;kernel;version; Keywords[gl]=sistema;información;detalles;gráficos;son;núcleo;versión; Keywords[gl_ES]=sistema;información;detalles;gráficos;son;núcleo;versión; Keywords[hr]=sustav;informacija;pojedinosti;grafika;zvuk;kernel;inačica; Keywords[hu]=rendszer;információk;részletek;grafika;hang;kernel;verzió; Keywords[hu_HU]=rendszer;információk;részletek;grafika;hang;kernel;verzió; Keywords[ia]=systema;informationes;detalios;graphic;sono;kernel;version; Keywords[id]=sistem;informasi;detailm grafis;suara;kernel;versi; Keywords[id_ID]=sistem;informasi;detailm grafis;suara;kernel;versi; Keywords[is]=kerfi;upplýsingar;nánar;myndrænt;hljóð;kjarni;útgáfa; Keywords[it]=sistema;informazione;dettagli;grafica;suono;kernel;versione; Keywords[it_CH]=sistema;informazione;dettagli;grafica;suono;kernel;versione; Keywords[it_IT]=sistema;informazione;dettagli;grafica;suono;kernel;versione; Keywords[ja]=システム、情報、詳細、グラフィック、音、カーネル、バージョン; Keywords[ja_JP]=システム、情報、詳細、グラフィック、音、カーネル、バージョン; Keywords[ko]=시스템;정보;세부사항;그래픽;사운드;커널;버전; Keywords[ko_KR]=시스템;정보;세부사항;그래픽;사운드;커널;버전; Keywords[lo]=ລະບົບ;ຂໍ້ມູນ;ລາຍລະອຽດ;ຮູບພາບ;ສຽງ;ເຄີເນວ;ລູ້ນ; Keywords[lo_LA]=ລະບົບ;ຂໍ້ມູນ;ລາຍລະອຽດ;ຮູບພາບ;ສຽງ;ເຄີເນວ;ລູ້ນ; Keywords[lt]=sistema;informacija;grafika;garsas;branduolys;versija; Keywords[lt_LT]=sistema;informacija;grafika;garsas;branduolys;versija; Keywords[lv]=sistēma;informācija;detaļas;grafika;skaņa;kodols;versija; Keywords[lv_LV]=sistēma;informācija;detaļas;grafika;skaņa;kodols;versija; Keywords[ms]=sistem;maklumat;terperinci;grafik;bunyi;kernel;versi; Keywords[ms_MY]=sistem;maklumat;terperinci;grafik;bunyi;kernel;versi; Keywords[nb]=system;informasjon;detaljer;grafikk;lyd;kjerne;versjon; Keywords[nb_NO]=system;informasjon;detaljer;grafikk;lyd;kjerne;versjon; Keywords[nds]=System;Information;Details;Grafik;Audio;Kernel;Version; Keywords[nl]=systeem;informatie;details;grafisch;geluid;kernel;versie; Keywords[nl_NL]=systeem;informatie;details;grafisch;geluid;kernel;versie; Keywords[om]=sirna;odeeffannoo;bal'inaalee;saxaatoo;sagalee;kerneelii;bahiinsa; Keywords[pl]=system;informacja;szczegóły;grafika;dźwięk;jądro;wersja; Keywords[pl_PL]=system;informacja;szczegóły;grafika;dźwięk;jądro;wersja; Keywords[pt]=sistema;informações;detalhes;objetos;som;kernel;versão; Keywords[pt_BR]=sistema;informação;detalhes;gráficos;som;kernel;versão; Keywords[pt_PT]=sistema;informações;detalhes;objetos;som;kernel;versão; Keywords[ro]=sistem;informații;detalii;grafică;sunet;kernel;versiune; Keywords[ro_RO]=sistem;informații;detalii;grafică;sunet;kernel;versiune; Keywords[ru]=система;информация;подробности;графика;звук;ядро;версия; Keywords[sk]=systém;informácie;podrobnosti;grafika;hudba;jadro;verzia; Keywords[sk_SK]=systém;informácie;podrobnosti;grafika;hudba;jadro;verzia; Keywords[sl]=sistem;podatki;podrobnosti;grafika;zvok;jedro;različica; Keywords[sl_SI]=sistem;podatki;podrobnosti;grafika;zvok;jedro;različica; Keywords[sq]=sistemi;informacione;detaje;grafika;zëri;kernel;versioni; Keywords[sr]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr@Latn]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr@ije]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr@ijekavianlatin]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr@latin]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr_RS]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sr_RS@latin]=систем;обавештење;појединости;графика;звук;језгро;издање;подаци; Keywords[sv]=system;information;detaljer;grafik;ljud;kärna;version; Keywords[ta]=கணினி;தகவல்;விவரங்கள்;வரைகலை;ஒலி;கர்னல்;பதிப்பு; Keywords[ta_LK]=கணினி;தகவல்;விவரங்கள்;வரைகலை;ஒலி;கர்னல்;பதிப்பு; Keywords[tg]=система;иттилоот;тафсилот;графика;садо;ҳаста;версия; Keywords[th]=ระบบ;ข้อมูล;รายละเอียด;กราฟิก;เสียง;เคอร์เนล;รุ่น; Keywords[th_TH]=ระบบ;ข้อมูล;รายละเอียด;กราฟิก;เสียง;เคอร์เนล;รุ่น; Keywords[tr]=sistem;bilgi;ayrıntılar;grafik;ses;çekirdek;sürüm; Keywords[tr_TR]=sistem;bilgi;ayrıntılar;grafik;ses;çekirdek;sürüm; Keywords[uk]=система;інформація;подробиці;графіка;звук;ядро;версія; Keywords[uk_UA]=система;інформація;подробиці;графіка;звук;ядро;версія; Keywords[ur]=سسٹم، معلومات، تفصیل، گرافکس، آواز، کرنل، ورژن، تفصیلات; Keywords[vi]=hệ thống;thông tin;chi tiết;đồ hoạ;âm thanh;nhân;phiên bản; Keywords[vi_VN]=hệ thống;thông tin;chi tiết;đồ hoạ;âm thanh;nhân;phiên bản; Keywords[zh_CN]=system;information;details;graphic;sound;kernel;version;系统;信息;详情;细节;图形;声音;内核;版本; Keywords[zh_HK]=system;information;details;graphic;sound;kernel;version;系統;資訊;詳細;圖像;聲音;核心;版本; Keywords[zh_TW]=系統;資訊;詳細資訊;繪圖;音效;核心;版本; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-windows.desktop0000664000175000017500000004517613215735076026471 0ustar fabiofabio[Desktop Entry] Icon=cs-windows Exec=cinnamon-settings windows Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Windows Name[am]=መስኮቶች Name[ar]=النوافذ Name[ast]=Ventanes Name[be]=Вокны Name[be@latin]=Вокны Name[be_BY]=Вокны Name[bg]=Прозорци Name[bg_BG]=Прозорци Name[bs]=Prozori Name[ca]=Finestres Name[ca@valencia]=Finestres Name[ca_ES]=Finestres Name[ca_ES@valencia]=Finestres Name[cs]=Okna Name[cs_CZ]=Okna Name[cy]=Ffenestri Name[da]=Vinduer Name[da_DK]=Vinduer Name[de]=Fenster Name[de_CH]=Fenster Name[de_DE]=Fenster Name[el]=Παράθυρα Name[eo]=Fenestroj Name[es]=Ventanas Name[es_AR]=Ventanas Name[es_CL]=Ventanas Name[es_CO]=Ventanas Name[es_CR]=Ventanas Name[es_DO]=Ventanas Name[es_EC]=Ventanas Name[es_ES]=Ventanas Name[es_MX]=Ventanas Name[es_NI]=Ventanas Name[es_PA]=Ventanas Name[es_PE]=Ventanas Name[es_PR]=Ventanas Name[es_SV]=Ventanas Name[es_UY]=Ventanas Name[es_VE]=Ventanas Name[eu]=Leihoak Name[fi]=Ikkunat Name[fi_FI]=Ikkunat Name[fil]=Mga dungawan Name[fr]=Fenêtres Name[fr_CA]=Fenêtres Name[fr_FR]=Fenêtres Name[ga]=Fuinneoga Name[gd]=Uinneagan Name[gl]=Xanelas Name[gl_ES]=Xanelas Name[hr]=Prozori Name[hu]=Ablakok Name[hu_HU]=Ablakok Name[ia]=Fenestras Name[id]=Jendela-jendela Name[id_ID]=Jendela-jendela Name[is]=Gluggar Name[it]=Finestre Name[it_CH]=Finestre Name[it_IT]=Finestre Name[ja]=ウィンドウ Name[ja_JP]=ウィンドウ Name[kab]=Isfuyla Name[ko]=창 Name[ko_KR]=창 Name[lo]=ໜ້າຕ່າງ Name[lo_LA]=ໜ້າຕ່າງ Name[lt]=Langai Name[lt_LT]=Langai Name[lv]=Logi Name[lv_LV]=Logi Name[ms]=Tetingkap Name[ms_MY]=Tetingkap Name[nb]=Vinduer Name[nb_NO]=Vinduer Name[nds]=Fenster Name[nl]=Vensters Name[nl_NL]=Vensters Name[oc]=Fenèstras Name[om]=Foddaalee Name[pa]=ਵਿੰਡੋਜ਼ Name[pl]=Okna Name[pl_PL]=Okna Name[pt]=Janelas Name[pt_BR]=Janelas Name[pt_PT]=Janelas Name[ro]=Ferestre Name[ro_RO]=Ferestre Name[ru]=Окна Name[sk]=Okná Name[sk_SK]=Okná Name[sl]=Okna Name[sl_SI]=Okna Name[sq]=Dritaret Name[sr]=Прозори Name[sr@Latn]=Прозори Name[sr@ije]=Прозори Name[sr@ijekavianlatin]=Прозори Name[sr@latin]=Прозори Name[sr_RS]=Прозори Name[sr_RS@latin]=Прозори Name[sv]=Fönster Name[ta]=சாளரங்கள் Name[ta_LK]=சாளரங்கள் Name[th]=หน้าต่าง Name[th_TH]=หน้าต่าง Name[tr]=Pencereler Name[tr_TR]=Pencereler Name[uk]=Вікна Name[uk_UA]=Вікна Name[ur]=ونڈوز Name[vi]=Cửa sổ Name[vi_VN]=Cửa sổ Name[zh_CN]=窗口 Name[zh_HK]=視窗 Name[zh_TW]=視窗 Comment=Manage window preferences Comment[am]=የመስኮት ምርጫዎች አስተዳዳሪ Comment[ar]=إدارة تفضيلات النافذة Comment[be]=Кіраванне наладамі вокнаў Comment[be@latin]=Кіраванне наладамі вокнаў Comment[be_BY]=Кіраванне наладамі вокнаў Comment[bg]=Управление настройките на прозорците Comment[bg_BG]=Управление настройките на прозорците Comment[bs]=Upravljaj postavkama prozora Comment[ca]=Gestiones les preferències de les finestres Comment[ca@valencia]=Administra les preferències de finestres Comment[ca_ES]=Gestiones les preferències de les finestres Comment[ca_ES@valencia]=Administra les preferències de finestres Comment[cs]=Změnit nastavení chování oken Comment[cs_CZ]=Změnit nastavení chování oken Comment[cy]=Rheoli dewisiadau ffenestr Comment[da]=Administrér vinduesindstillinger Comment[da_DK]=Administrér vinduesindstillinger Comment[de]=Fenstereinstellungen verwalten Comment[de_CH]=Fenstereinstellungen verwalten Comment[de_DE]=Fenstereinstellungen verwalten Comment[el]=Ρυθμίστε τις επιλογές παραθύρων Comment[es]=Administrar las preferencias de ventanas Comment[es_AR]=Administrar las preferencias de ventanas Comment[es_CL]=Administrar las preferencias de ventanas Comment[es_CO]=Administrar las preferencias de ventanas Comment[es_CR]=Administrar las preferencias de ventanas Comment[es_DO]=Administrar las preferencias de ventanas Comment[es_EC]=Administrar las preferencias de ventanas Comment[es_ES]=Administrar las preferencias de ventanas Comment[es_MX]=Administrar las preferencias de ventanas Comment[es_NI]=Administrar las preferencias de ventanas Comment[es_PA]=Administrar las preferencias de ventanas Comment[es_PE]=Administrar las preferencias de ventanas Comment[es_PR]=Administrar las preferencias de ventanas Comment[es_SV]=Administrar las preferencias de ventanas Comment[es_UY]=Administrar las preferencias de ventanas Comment[es_VE]=Administrar las preferencias de ventanas Comment[eu]=Kudeatu leiho-hobespenak Comment[fi]=Muokkaa ikkunoiden asetuksia Comment[fi_FI]=Muokkaa ikkunoiden asetuksia Comment[fr]=Gérer les préférences de la fenêtre Comment[fr_CA]=Gérer les préférences des fenêtres Comment[fr_FR]=Gérer les préférences de la fenêtre Comment[gd]=Stiùirich roghainnean nan uinneagan Comment[gl]=Administra as preferencias da xanela Comment[gl_ES]=Administra as preferencias da xanela Comment[hr]=Upravljajte osobitostima prozora Comment[hu]=Ablak beállítások kezelése Comment[hu_HU]=Ablak beállítások kezelése Comment[ia]=Gerer le preferentias de fenestra Comment[id]=Atur preferensi jendela Comment[id_ID]=Atur preferensi jendela Comment[is]=Sýsla með kjörstillingar glugga Comment[it]=Gestisci preferenze finesta Comment[it_CH]=Gestisci preferenze finesta Comment[it_IT]=Gestisci preferenze finesta Comment[ja]=ウインドウ管理の設定 Comment[ja_JP]=ウインドウ管理の設定 Comment[ko]=창 설정을 관리합니다 Comment[ko_KR]=창 설정을 관리합니다 Comment[lt]=Tvarkyti lango nuostatas Comment[lt_LT]=Tvarkyti lango nuostatas Comment[lv]=Pārvaldīt logu preferences Comment[lv_LV]=Pārvaldīt logu preferences Comment[ms]=Mengurus pilihan tetingkap Comment[ms_MY]=Mengurus pilihan tetingkap Comment[nb]=Håndter vindusinnstillinger Comment[nb_NO]=Håndter vindusinnstillinger Comment[nds]=Fenster-Einstellungen bearbeiten Comment[nl]=Venstervoorkeuren beheren Comment[nl_NL]=Venstervoorkeuren beheren Comment[oc]=Gerir las preferéncias de las fenèstras Comment[pl]=Zarządzaj preferencjami okien Comment[pl_PL]=Zarządzaj preferencjami okien Comment[pt]=Gerir preferências de janelas Comment[pt_BR]=Gerenciar preferências de janelas Comment[pt_PT]=Gerir preferências de janelas Comment[ro]=Gestionează preferințele ferestrelor Comment[ro_RO]=Gestionează preferințele ferestrelor Comment[ru]=Управление настройками окон Comment[sk]=Spravovať predvoľby okien Comment[sk_SK]=Spravovať predvoľby okien Comment[sl]=Upravljajte z možnostmi oken Comment[sl_SI]=Upravljajte z možnostmi oken Comment[sq]=Menaxhoni parapëlqimet e dritares Comment[sr]=Управљање поставкама прозора Comment[sr@Latn]=Управљање поставкама прозора Comment[sr@ije]=Управљање поставкама прозора Comment[sr@ijekavianlatin]=Управљање поставкама прозора Comment[sr@latin]=Управљање поставкама прозора Comment[sr_RS]=Управљање поставкама прозора Comment[sr_RS@latin]=Управљање поставкама прозора Comment[sv]=Hantera fönsterinställningar Comment[tg]=Идоракунии хусусиятҳои равзана Comment[th]=จัดการการตั้งค่าหน้าต่างขั้นสูง Comment[th_TH]=จัดการการตั้งค่าหน้าต่างขั้นสูง Comment[tr]=Pencere tercihlerini yönet Comment[tr_TR]=Pencere tercihlerini yönet Comment[uk]=Керувати параметрами вікон Comment[uk_UA]=Керувати параметрами вікон Comment[ur]=ونڈو کی ترجیحات Comment[vi]=Quản lý tuỳ thích cửa sổ Comment[vi_VN]=Quản lý tuỳ thích cửa sổ Comment[zh_CN]=管理窗口样式 Comment[zh_HK]=管理視窗喜好設定 Comment[zh_TW]=管理視窗偏好設定 Keywords=windows;titlebar;edge;switcher;window list;attention;focus; Keywords[ar]=نوافذ، شريط العنوان، حافة، مبّدل، قائمة النوافذ، انتباه، تركيز; Keywords[be]=вокны;загаловак;край;пераключацель;спіс вокнаў;увага;фокус; Keywords[be@latin]=вокны;загаловак;край;пераключацель;спіс вокнаў;увага;фокус; Keywords[be_BY]=вокны;загаловак;край;пераключацель;спіс вокнаў;увага;фокус; Keywords[bg]=прозорец;заглавна лента;ръб;превключване;списък с прозорци;внимание;фокус; Keywords[bg_BG]=прозорец;заглавна лента;ръб;превключване;списък с прозорци;внимание;фокус; Keywords[bs]=prozori;traka naslova;ivica;mjenjač;lista prozora;pažnja;fokus; Keywords[ca]=finestres;barra de títol;vora;interruptor;llista de finestres;atenció;enfocament; Keywords[ca@valencia]=finestres;barra de títol;bord;interruptor;llista de finestres;atenció;enfocament; Keywords[ca_ES]=finestres;barra de títol;vora;interruptor;llista de finestres;atenció;enfocament; Keywords[ca_ES@valencia]=finestres;barra de títol;bord;interruptor;llista de finestres;atenció;enfocament; Keywords[cs]=okna;nadpisy;strany;přepínáč;seznam oken;pozornost;zaměřit; Keywords[cs_CZ]=okna;nadpisy;strany;přepínáč;seznam oken;pozornost;zaměřit; Keywords[cy]=ffenestri;bar teitl;ymyl;newidydd;rhestr ffenestr;sylw;canolbwyntio; Keywords[da]=vinduer;titellinie;kant;skifter;vinduesliste;opmærksomhed;fokus; Keywords[da_DK]=vinduer;titellinie;kant;skifter;vinduesliste;opmærksomhed;fokus; Keywords[de]=Fenster;Titelleiste;Umrandung;Umschalter;Fensterliste;Aufmerksamkeit;Fokus; Keywords[de_CH]=Fenster;Titelleiste;Umrandung;Umschalter;Fensterliste;Aufmerksamkeit;Fokus; Keywords[de_DE]=Fenster;Titelleiste;Umrandung;Umschalter;Fensterliste;Aufmerksamkeit;Fokus; Keywords[el]=παράθυρα;γραμμή τίτλου;άκρη;διακόπτης;λίστα παραθύρων;προσοχή;εστίαση; Keywords[es]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_AR]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_CL]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_CO]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_CR]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_DO]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_EC]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_ES]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_MX]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_NI]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_PA]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_PE]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_PR]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_SV]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_UY]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[es_VE]=ventanas;barra de título;borde;interruptor;lista de ventanas;atención;enfoque; Keywords[eu]=leihoa;titulu-barra;ertza;aldatzailea;leiho-zerrenda;arreta;fokua; Keywords[fi]=ikkunat;otsikkopalkki;reuna;vaihtaja;ikkunalista;huomio;keskitys; Keywords[fi_FI]=ikkunat;otsikkopalkki;reuna;vaihtaja;ikkunalista;huomio;keskitys; Keywords[fr]=fenêtre;barre de titre;bord;commutateur;liste de fenêtre;attention;focus; Keywords[fr_CA]=fenêtres;barre de titre;bord;commutateur;liste de fenêtres;attention;focus; Keywords[fr_FR]=fenêtre;barre de titre;bord;commutateur;liste de fenêtre;attention;focus; Keywords[ga]=fuinneoga;barra teidil;imeall;lascóir;liosta fuinneoige;aird;fócas; Keywords[gd]=uinneagan. bàr-tiotail;oir;suidsear;liosta nan uinneagan;aire;fòcas;windows;titlebar;edge;switcher;window list;attention;focus; Keywords[gl]=xanelas;barra de título;bordo;cambiador;lista de xanelas;atención;foco; Keywords[gl_ES]=xanelas;barra de título;bordo;cambiador;lista de xanelas;atención;foco; Keywords[hr]=prozori;naslovna traka;rub;prijelaz;popis prozora;upozorenje;fokus; Keywords[hu]=ablakok;címsor;él;váltó;ablaklista;figyelem;fókusz; Keywords[hu_HU]=ablakok;címsor;él;váltó;ablaklista;figyelem;fókusz; Keywords[ia]=fenestras;barra de titulo;bordo;commutator;lista del fenestras;attention;foco; Keywords[id]=jendela;bar judul;ujung;pemindah;daftar jendela;perhatian;fokus; Keywords[id_ID]=jendela;bar judul;ujung;pemindah;daftar jendela;perhatian;fokus; Keywords[is]=gluggar;titilslá;jaðar;skiptir;gluggalisti;kvaðning;athygli;fókus;virkni; Keywords[it]=finestre;barra del titolo;margine;switcher;elenco finestre;attenzione;focus; Keywords[it_CH]=finestre;barra del titolo;margine;switcher;elenco finestre;attenzione;focus; Keywords[it_IT]=finestre;barra del titolo;margine;switcher;elenco finestre;attenzione;focus; Keywords[ja]=ウィンドウ、タイトルバー、エッジ、スイッチャーウィンドウリスト、注意、フォーカス; Keywords[ja_JP]=ウィンドウ、タイトルバー、エッジ、スイッチャーウィンドウリスト、注意、フォーカス; Keywords[ko]=창;제목;엣지;스위처;창 목록;집중;포커스; Keywords[ko_KR]=창;제목;엣지;스위처;창 목록;집중;포커스; Keywords[lv]=logi;virsraksta josla;mala;pārslēdzējs;logu saraksts;uzmanība;fokuss; Keywords[lv_LV]=logi;virsraksta josla;mala;pārslēdzējs;logu saraksts;uzmanība;fokuss; Keywords[ms]=tetingkap;palang tajuk;pinggir;penukar;senarai tetingkap;perhatian;fokus; Keywords[ms_MY]=tetingkap;palang tajuk;pinggir;penukar;senarai tetingkap;perhatian;fokus; Keywords[nb]=vindu;tittellinje;kant;bryter;vindusliste;oppmerksomhet;fokus; Keywords[nb_NO]=vindu;tittellinje;kant;bryter;vindusliste;oppmerksomhet;fokus; Keywords[nl]=vensters;titelbalk;rand;wisselaar;vensterlijst;aandacht;scherpstelling; Keywords[nl_NL]=vensters;titelbalk;rand;wisselaar;vensterlijst;aandacht;scherpstelling; Keywords[om]=foddaawwan;kabala mataduree;qarree;jijjirtuu;tarree foddaa;hubadhu;xiyyeeffadhu; Keywords[pl]=okna;pasek tytułowy;krawędź;przełącznik;lista okien;uwaga;skupienie; Keywords[pl_PL]=okna;pasek tytułowy;krawędź;przełącznik;lista okien;uwaga;skupienie; Keywords[pt]=janelas;barra de título;limite;comutador;lista de janelas;foco; Keywords[pt_BR]=janelas;barra de título;margem;alternador;lista de janelas;atenção;foco; Keywords[pt_PT]=janelas;barra de título;limite;comutador;lista de janelas;foco; Keywords[ro]=ferestre;bară de titlu;margine;comutator;listă de ferestre;atenție;focus; Keywords[ro_RO]=ferestre;bară de titlu;margine;comutator;listă de ferestre;atenție;focus; Keywords[ru]=окна;заголовок;край;переключатель;список окон;внимание;фокус; Keywords[sk]=okná;nadpisy;strany;prepínáč;zoznam okien;pozornosť;zamerať; Keywords[sk_SK]=okná;nadpisy;strany;prepínáč;zoznam okien;pozornosť;zamerať; Keywords[sl]=okna;nazivna vrstica;rob;preklopnik;seznam oken;pozornost;žarišče; Keywords[sl_SI]=okna;nazivna vrstica;rob;preklopnik;seznam oken;pozornost;žarišče; Keywords[sr]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr@Latn]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr@ije]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr@ijekavianlatin]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr@latin]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr_RS]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sr_RS@latin]=прозори;насловна трака;ивица;измењивач;списак прозора;пажња;жижа; Keywords[sv]=fönster;titelrad;kant;växlare;fönster lista;uppmärksamhet;fokus; Keywords[ta]=சாளரங்கள்;தலைப்புபட்டி;முனை;மாற்றி;சாளர பட்டியல்;கவனம்;குவிப்பு; Keywords[ta_LK]=சாளரங்கள்;தலைப்புபட்டி;முனை;மாற்றி;சாளர பட்டியல்;கவனம்;குவிப்பு; Keywords[tg]=равзанаҳо;навори унвон;канор;ивазкунанда;рӯйхати равзана;диққат;марказ; Keywords[th]=หน้าต่าง;แถบชื่อเรื่อง;ขอบเขต;ตัวสลับ;รายการหน้าต่าง;คำเตือน;โฟกัส; Keywords[th_TH]=หน้าต่าง;แถบชื่อเรื่อง;ขอบเขต;ตัวสลับ;รายการหน้าต่าง;คำเตือน;โฟกัส; Keywords[tr]=pencereler;başlık çubuğu;kenar;değiştirici;pencere listesi;uyarı;odaklanma; Keywords[tr_TR]=pencereler;başlık çubuğu;kenar;değiştirici;pencere listesi;uyarı;odaklanma; Keywords[uk]=вікна;заголовок;край;перемикач;перелік вікон;увага;фокус; Keywords[uk_UA]=вікна;заголовок;край;перемикач;перелік вікон;увага;фокус; Keywords[ur]=ونڈو، ٹائٹل بار، دریجہ، کنارہ، سویچر، ونڈو فہرست، توجہ، فوکس; Keywords[vi]=cửa sổ;thanh tiêu đề;cạnh;bộ chuyển;danh sách cửa sổ;chú ý;tiêu điểm; Keywords[vi_VN]=cửa sổ;thanh tiêu đề;cạnh;bộ chuyển;danh sách cửa sổ;chú ý;tiêu điểm; Keywords[zh_CN]=windows;titlebar;edge;switcher;window list;attention;focus;窗口;标题栏;边缘;切换器;窗口列表;注意;焦点; Keywords[zh_HK]=視窗;標題列;邊緣;切換器;視窗清單;注意;焦點; Keywords[zh_TW]=視窗;標題列;邊緣;切換器;視窗列表;注意;焦點; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-users.desktop0000664000175000017500000003751413215735076026135 0ustar fabiofabio[Desktop Entry] Exec=cinnamon-settings-users Icon=system-users Terminal=false Type=Application Categories=System;Settings; StartupNotify=false OnlyShowIn=X-Cinnamon; Keywords=Preferences;Settings; Name=Users and Groups Name[af]=Gebruikers en Groepe Name[am]=ተጠቃሚዎች እና ቡድኖች Name[ar]=المستخدمين والمجموعات Name[ar_MA]=المستخدمين والمجموعات Name[ast]=Usuarios y grupos Name[az]=İstifadəçilər və Qruplar Name[be]=Карыстальнікі і групы Name[be@latin]=Карыстальнікі і групы Name[be_BY]=Карыстальнікі і групы Name[bg]=Потребители и Групи Name[bg_BG]=Потребители и Групи Name[bn]=ব্যবহারকারীগণ এবং দলসমূহ Name[bn_IN]=ব্যবহারকারীগণ এবং দলসমূহ Name[bs]=Korisnici i grupe Name[ca]=Usuaris i grups Name[ca@valencia]=Usuaris i grups Name[ca_ES]=Usuaris i grups Name[ca_ES@valencia]=Usuaris i grups Name[cs]=Uživatelé a skupiny Name[cs_CZ]=Uživatelé a skupiny Name[cy]=Defnyddwyr a Grwpiau Name[da]=Brugere og grupper Name[da_DK]=Brugere og grupper Name[de]=Benutzer und Gruppen Name[de@hebrew]=Benutzer und Gruppen Name[de_CH]=Benutzer und Gruppen Name[de_DE]=Benutzer und Gruppen Name[el]=Χρήστες και Ομάδες Name[eo]=Uzantoj kaj grupoj Name[es]=Usuarios y grupos Name[es_419]=Usuarios y grupos Name[es_AR]=Usuarios y Grupos Name[es_CL]=Usuarios y grupos Name[es_CO]=Usuarios y grupos Name[es_CR]=Usuarios y grupos Name[es_DO]=Usuarios y grupos Name[es_EC]=Usuarios y grupos Name[es_ES]=Usuarios y grupos Name[es_MX]=Usuarios y grupos Name[es_NI]=Usuarios y grupos Name[es_PA]=Usuarios y grupos Name[es_PE]=Usuarios y grupos Name[es_PR]=Usuarios y grupos Name[es_SV]=Usuarios y grupos Name[es_US]=Usuarios y grupos Name[es_UY]=Usuarios y grupos Name[es_VE]=Usuarios y grupos Name[et]=Kasutajad ja grupid Name[eu]=Erabiltzaileak eta taldeak Name[fa]=کاربران و گروه‌ها Name[fa_AF]=کاربران و گروه‌ها Name[fa_IR]=کاربران و گروه‌ها Name[fi]=Käyttäjät ja ryhmät Name[fi_FI]=Käyttäjät ja ryhmät Name[fil]=Ang mga gumagamit at mga Grupo Name[fr]=Utilisateurs et Groupes Name[fr_CA]=Utilisateurs et groupes Name[fr_FR]=Utilisateurs et Groupes Name[fy]=Brûkers en Ploechen Name[gd]=Cleachdaichean agus buidhnean Name[gl]=Usuarios e grupos Name[gl_ES]=Usuarios e grupos Name[he]=משתמשים וקבוצות Name[he_IL]=משתמשים וקבוצות Name[hi]=यूजर एवं ग्रुप Name[hr]=Korisnici i grupe Name[hu]=Felhasználók és csoportok Name[hu_HU]=Felhasználók és csoportok Name[hy]=Օգտվողներ և խմբեր Name[ia]=Usatores e gruppos Name[id]=Pengguna dan Grup Name[id_ID]=Pengguna dan Grup Name[is]=Notendur og hópar Name[it]=Utenti e gruppi Name[ka]=მომხმარებლები და ჯგუფები Name[kab]=Iseqdacen d igrawen Name[kk]=Пайдаланушылар мен Топтар Name[km]=អ្នក​ប្រើ និង​ក្រុម Name[km_KH]=អ្នក​ប្រើ និង​ក្រុម Name[ko]=사용자와 그룹 Name[ko_KR]=사용자와 그룹 Name[ku]=Bikarhêner û Kom Name[ku_IQ]=Bikarhêner û Kom Name[la]=Homines annuntiaturi et circli Name[li]=Gebroekers en groepe Name[lo]=ຜູ້ໃຊ້ແລະກຸ່ມ Name[lo_LA]=ຜູ້ໃຊ້ແລະກຸ່ມ Name[lt]=Naudotojai ir grupės Name[lt_LT]=Naudotojai ir grupės Name[lv]=Lietotāji un Grupas Name[lv_LV]=Lietotāji un Grupas Name[mr]=वापरकर्ते व गट Name[ms]=Pengguna dan Kumpulan Name[ms_MY]=Pengguna dan Kumpulan Name[nap]=Utenti e Grupp Name[nb]=Brukere og grupper Name[nb_NO]=Brukere og grupper Name[nds]=Benutzer und Gruppen Name[ne]=प्रयोगकर्ता र समूहहरु Name[nl]=Gebruikers en groepen Name[nl_NL]=Gebruikers en groepen Name[oc]=Utilizaires e gropes Name[om]=Fayyadamtootaa fi gareewwan Name[pa]=ਯੂਜ਼ਰ ਅਤੇ ਗਰੁੱਪ Name[pl]=Użytkownicy i grupy Name[pl_PL]=Użytkownicy i grupy Name[pt]=Utilizadores e grupos Name[pt_BR]=Usuários e Grupos Name[pt_PT]=Utilizadores e grupos Name[ro]=Utilizatori și grupuri Name[ro_RO]=Utilizatori și grupuri Name[ru]=Пользователи и группы Name[sc]=Impitadores e Grupos Name[si]=භාවිතා කරන්නන් සහ සමුහ Name[sk]=Používatelia a skupiny Name[sk_SK]=Používatelia a skupiny Name[sl]=Uporabniki in skupine Name[sl_SI]=Uporabniki in skupine Name[sq]=Përdoruesit dhe Grupet Name[sr]=Корисници и групе Name[sr@Latn]=Корисници и групе Name[sr@ije]=Корисници и групе Name[sr@ijekavianlatin]=Корисници и групе Name[sr@latin]=Корисници и групе Name[sr_RS]=Корисници и групе Name[sr_RS@latin]=Корисници и групе Name[sv]=Användare och grupper Name[ta]=பயனர்கள் மற்றும் குழுக்கள் Name[ta_LK]=பயனர்கள் மற்றும் குழுக்கள் Name[tg]=Корбарон ва гурӯҳҳо Name[th]=ผู้ใช้และกลุ่ม Name[th_TH]=ผู้ใช้และกลุ่ม Name[tl]=Mga Gumagamit at Pangkat Name[tr]=Kullanıcılar ve Gruplar Name[tr_TR]=Kullanıcılar ve Gruplar Name[ug]=ئىشلەتكۈچىلەر ۋە گۇرۇپپىلار Name[uk]=Користувачі і групи Name[uk_UA]=Користувачі і групи Name[ur]=صارفین اور گروہ Name[ur_PK]=صارفین اور گروہ Name[uz]=Фойдаланувчилар ва гуруҳлар Name[uz@Latn]=Фойдаланувчилар ва гуруҳлар Name[uz@cyrillic]=Фойдаланувчилар ва гуруҳлар Name[vi]=Người dùng và Nhóm Name[vi_VN]=Người dùng và Nhóm Name[zh_CN]=用户和用户组 Name[zh_HK]=使用者與羣組 Name[zh_TW]=使用者與群組 Comment=Add or remove users and groups Comment[af]=Voeg of verwyder gebruikers en groepe Comment[am]=ተጠቃሚዎች እና ቡድኖች መጨመሪያ ወይንም ማስወገጃ Comment[ar]=اضافة أو ازالة المستخدمين والمجموعات Comment[ar_MA]=اضافة أو ازالة المستخدمين والمجموعات Comment[ast]=Amiesta o desanicia usuarios y grupos Comment[az]=İstifadəçi və qrupları əlavə et və ya sil Comment[be]=Дадаць або выдаліць карыстальнікаў і групы Comment[be@latin]=Дадаць або выдаліць карыстальнікаў і групы Comment[be_BY]=Дадаць або выдаліць карыстальнікаў і групы Comment[bg]=Добавяне или премахване на потребители и групи Comment[bg_BG]=Добавяне или премахване на потребители и групи Comment[bn]=যোগ করুন অথবা মুছে ফেলুন ব্যবহারকারী এবং দল Comment[bn_IN]=যোগ করুন অথবা মুছে ফেলুন ব্যবহারকারী এবং দল Comment[bs]=Dodajte ili uklonite korisnike i grupe Comment[ca]=Afegiu o suprimiu usuaris i grups Comment[ca@valencia]=Afegir o eliminar usuaris i grups Comment[ca_ES]=Afegiu o suprimiu usuaris i grups Comment[ca_ES@valencia]=Afegir o eliminar usuaris i grups Comment[cs]=Přidat nebo odstranit uživatele a skupiny Comment[cs_CZ]=Přidat nebo odstranit uživatele a skupiny Comment[cy]=Ychwanegu neu dynnu defnyddwyr a grwpiau Comment[da]=Tilføj eller fjern brugere og grupper Comment[da_DK]=Tilføj eller fjern brugere og grupper Comment[de]=Benutzer und Gruppen hinzufügen oder entfernen Comment[de@hebrew]=Benutzer und Gruppen hinzufügen oder entfernen Comment[de_CH]=Benutzer und Gruppen hinzufügen oder entfernen Comment[de_DE]=Benutzer und Gruppen hinzufügen oder entfernen Comment[el]=Προσθήκη ή αφαίρεση χρηστών και ομάδων Comment[eo]=Aldoni aŭ forigi uzantojn kaj grupojn Comment[es]=Añadir o eliminar usuarios y grupos Comment[es_419]=Añadir o eliminar usuarios y grupos Comment[es_AR]=Agregar o quitar usuarios y grupos Comment[es_CL]=Añadir o eliminar usuarios y grupos Comment[es_CO]=Añadir o eliminar usuarios y grupos Comment[es_CR]=Añadir o eliminar usuarios y grupos Comment[es_DO]=Añadir o eliminar usuarios y grupos Comment[es_EC]=Añadir o eliminar usuarios y grupos Comment[es_ES]=Añadir o eliminar usuarios y grupos Comment[es_MX]=Añadir o eliminar usuarios y grupos Comment[es_NI]=Añadir o eliminar usuarios y grupos Comment[es_PA]=Añadir o eliminar usuarios y grupos Comment[es_PE]=Añadir o eliminar usuarios y grupos Comment[es_PR]=Añadir o eliminar usuarios y grupos Comment[es_SV]=Añadir o eliminar usuarios y grupos Comment[es_US]=Añadir o eliminar usuarios y grupos Comment[es_UY]=Añadir o eliminar usuarios y grupos Comment[es_VE]=Añadir o eliminar usuarios y grupos Comment[et]=Lisa või eemalda kasutajaid ja gruppe Comment[eu]=Gehitu edo ezabatu erabiltzaileak eta taldeak Comment[fa]=اضافه یا حذف کردن کاربران و گروه‌ها Comment[fa_AF]=اضافه یا حذف کردن کاربران و گروه‌ها Comment[fa_IR]=اضافه یا حذف کردن کاربران و گروه‌ها Comment[fi]=Lisää tai poista käyttäjiä ja ryhmiä Comment[fi_FI]=Lisää tai poista käyttäjiä ja ryhmiä Comment[fil]=Magdagdag o mag-alis ng mga user at mga pangkat Comment[fr]=Ajouter ou supprimer des utilisateurs et des groupes Comment[fr_CA]=Ajouter ou supprimer des utilisateurs et des groupes Comment[fr_FR]=Ajouter ou supprimer des utilisateurs et des groupes Comment[fy]=Brûkers en ploechen taheakje of ferwiderje Comment[gd]=Cuir ris no thoir air falbh cleachdaichean is buidhnean Comment[gl]=Engada ou retire usuarios e grupos Comment[gl_ES]=Engada ou retire usuarios e grupos Comment[he]=הוספה או הסרה של משתמשים וקבוצות Comment[he_IL]=הוספה או הסרה של משתמשים וקבוצות Comment[hi]=यूजर एवं ग्रुप जोड़े अथवा हटायें Comment[hr]=Dodaj ili ukloni korisnike i grupe Comment[hu]=Felhasználók és csoportok hozzáadása vagy eltávolítása Comment[hu_HU]=Felhasználók és csoportok hozzáadása vagy eltávolítása Comment[hy]=Ավելացնել կամ ջնջել օգտվողներ և խմբեր Comment[ia]=Adder o remover usatores e gruppos Comment[id]=Tambah atau hapus pemakai dan kelompoknya Comment[id_ID]=Tambah atau hapus pemakai dan kelompoknya Comment[is]=Bæta við eða fjarlægja notendur og hópa Comment[it]=Aggiunge o rimuove utenti e gruppi Comment[ja]=ユーザ及びグループの追加や削除 Comment[ja_JP]=ユーザ及びグループの追加や削除 Comment[ka]=მომხმარებლების და ჯგუფების დამატება ან ამოშლა Comment[kab]=Rnu neɣ kkes iseqdacen akked igrawen Comment[ko]=사용자와 그룹 추가 또는 제거 Comment[ko_KR]=사용자와 그룹 추가 또는 제거 Comment[ku]=Bikarhêner û koman lê zêde bike an jî jê bibe Comment[ku_IQ]=Bikarhêner û koman lê zêde bike an jî jê bibe Comment[la]=Addere aut delere homines annuntiaturi et circli Comment[li]=Gebroekers en groepe toevoege of verwijdere Comment[lo]=ຕື່ມຫຼືລຶບຜູ້ໃຊ້ແລະກູ່ມ Comment[lo_LA]=ຕື່ມຫຼືລຶບຜູ້ໃຊ້ແລະກູ່ມ Comment[lt]=Pridėti ar šalinti naudotojus bei grupes Comment[lt_LT]=Pridėti ar šalinti naudotojus bei grupes Comment[lv]=Pievienot vai dzēst lietotājus un grupas Comment[lv_LV]=Pievienot vai dzēst lietotājus un grupas Comment[mr]=वापरकर्ते व गट जोडा किंवा काढून टाका Comment[ms]=Tambah atau buang pengguna dan kumpulan Comment[ms_MY]=Tambah atau buang pengguna dan kumpulan Comment[nap]=Miett ati utenti e grupp Comment[nb]=Legg til eller fjern brukere og grupper Comment[nb_NO]=Legg til eller fjern brukere og grupper Comment[nds]=Benutzer oder Gruppen hinzufügen bzw. löschen Comment[ne]=प्रयोगकर्ता र समुहहरुलाई जोड्नुस् वा हटाउनुहोस् Comment[nl]=Gebruikers en groepen toevoegen of verwijderen Comment[nl_NL]=Gebruikers en groepen toevoegen of verwijderen Comment[oc]=Apondre o suprimir d'utilizaires o de gropes Comment[om]=fayyadamtootaa fi gareewwan dabaluu fi haquu Comment[pa]=ਯੂਜ਼ਰ ਤੇ ਗਰੁੱਪ ਸ਼ਾਮਲ ਕਰੋ ਜਾਂ ਹਟਾਓ Comment[pl]=Dodawanie lub usuwanie użytkowników i grup Comment[pl_PL]=Dodawanie lub usuwanie użytkowników i grup Comment[pt]=Adicionar ou remover utilizadores e grupos Comment[pt_BR]=Adicionar ou remover usuários e grupos Comment[pt_PT]=Adicionar ou remover utilizadores e grupos Comment[ro]=Adăugă sau elimină utilizatori și grupuri Comment[ro_RO]=Adăugă sau elimină utilizatori și grupuri Comment[ru]=Добавить или удалить пользователей и группы Comment[sc]=Agiunghe o Boga impitadores e grupos Comment[si]=පරිශීලකයන් සහ සමුහ එක් කිරීම හෝ ඉවත් කිරීම Comment[sk]=Pridanie alebo odstránenie používateľov a skupín Comment[sk_SK]=Pridanie alebo odstránenie používateľov a skupín Comment[sl]=Dodajte ali odstranite uporabnike in skupine Comment[sl_SI]=Dodajte ali odstranite uporabnike in skupine Comment[sq]=Shto ose hiq përdorues dhe grupe Comment[sr]=Додајте или уклоните кориснике и групе Comment[sr@Latn]=Додајте или уклоните кориснике и групе Comment[sr@ije]=Додајте или уклоните кориснике и групе Comment[sr@ijekavianlatin]=Додајте или уклоните кориснике и групе Comment[sr@latin]=Додајте или уклоните кориснике и групе Comment[sr_RS]=Додајте или уклоните кориснике и групе Comment[sr_RS@latin]=Додајте или уклоните кориснике и групе Comment[sv]=Lägg till eller ta bort användare och grupper Comment[ta]=பயனர் மற்றும் குழுக்களை சேர் அல்லது நீக்கு Comment[ta_LK]=பயனர் மற்றும் குழுக்களை சேர் அல்லது நீக்கு Comment[tg]=Илова ё тоза кардани корбарон ва гурӯҳҳо Comment[th]=เพิ่มหรือลบผู้ใช้และกลุ่ม Comment[th_TH]=เพิ่มหรือลบผู้ใช้และกลุ่ม Comment[tl]=Magdagdag o magbawas ng mga user at pangkat Comment[tr]=Kullanıcıları ve grupları ekle ya da sil Comment[tr_TR]=Kullanıcıları ve grupları ekle ya da sil Comment[ug]=ئىشلەتكۈچى ۋە گۇرۇپپا قوش ياكى ئۆچۈر Comment[uk]=Додавання або вилучення записів користувачів та груп Comment[uk_UA]=Додавання або вилучення записів користувачів та груп Comment[ur]=صارفین اور گروہ شامل کریں یا مٹائیں Comment[ur_PK]=صارفین اور گروہ شامل کریں یا مٹائیں Comment[uz]=Фойдаланувчилар ва гуруҳларни қўшиш ёки олиб ташлаш Comment[uz@Latn]=Фойдаланувчилар ва гуруҳларни қўшиш ёки олиб ташлаш Comment[uz@cyrillic]=Фойдаланувчилар ва гуруҳларни қўшиш ёки олиб ташлаш Comment[vi]=Thêm hay loại bỏ người dùng và nhóm Comment[vi_VN]=Thêm hay loại bỏ người dùng và nhóm Comment[zh_CN]=添加或删除用户和组 Comment[zh_HK]=新增或移除使用者與羣組 Comment[zh_TW]=加入或移除使用者與群組 Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-desklets.desktop0000664000175000017500000003777413215735076026622 0ustar fabiofabio[Desktop Entry] Icon=cs-desklets Exec=cinnamon-settings desklets Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Desklets Name[am]=ዴስክሌቶች Name[ar]=معلّقات Name[be]=Дэсклеты Name[be@latin]=Дэсклеты Name[be_BY]=Дэсклеты Name[bg]=Десклети Name[bg_BG]=Десклети Name[bs]=Deskleti Name[cs]=Desklety Name[cs_CZ]=Desklety Name[cy]=Desgledi Name[da]=Skrivebordsprogrammer Name[da_DK]=Skrivebordsprogrammer Name[el]=Εφαρμογές Οθόνης Name[eo]=Deskletoj Name[eu]=Desklet-ak Name[fa]=دسک‌لت Name[fa_AF]=دسک‌لت Name[fa_IR]=دسک‌لت Name[fi]=Työpöytäsovelmat Name[fi_FI]=Työpöytäsovelmat Name[ga]=Deiscíní Name[gl]=Trebellos Name[gl_ES]=Trebellos Name[hr]=Deskleti Name[hu]=Asztalkalmazások Name[hu_HU]=Asztalkalmazások Name[id]=Desklet Name[id_ID]=Desklet Name[is]=Skjáborðsgræjur Name[it]=Desklet Name[it_CH]=Desklet Name[it_IT]=Desklet Name[ja]=デスクレット Name[ja_JP]=デスクレット Name[kab]=Tideskeltin Name[ko]=데스크릿 Name[ko_KR]=데스크릿 Name[lo]=ເດສເລັດ Name[lo_LA]=ເດສເລັດ Name[lt]=Ekrano programėlės Name[lt_LT]=Ekrano programėlės Name[lv]=Sīkrīki Name[lv_LV]=Sīkrīki Name[ms]=Desklet Name[ms_MY]=Desklet Name[nb]=Skrivebordsprogrammer Name[nb_NO]=Skrivebordsprogrammer Name[nl]=Minitoepassingen Name[nl_NL]=Minitoepassingen Name[pa]=ਡੈਸਕਲੇਟਸ Name[pl]=Desklety Name[pl_PL]=Desklety Name[pt]=Mini-aplicações Name[pt_PT]=Mini-aplicações Name[ro]=Deskleturi Name[ro_RO]=Deskleturi Name[ru]=Десклеты Name[sk]=Desklety Name[sk_SK]=Desklety Name[sl]=Apleti namizja Name[sl_SI]=Apleti namizja Name[sq]=Desklet-ët Name[sr]=Справице Name[sr@Latn]=Справице Name[sr@ije]=Справице Name[sr@ijekavianlatin]=Справице Name[sr@latin]=Справице Name[sr_RS]=Справице Name[sr_RS@latin]=Справице Name[sv]=Skrivbordsprogram Name[ta]=திரை நிரல்கள் Name[ta_LK]=திரை நிரல்கள் Name[tg]=Барномаҳои мизи корӣ Name[th]=เดสก์เล็ต Name[th_TH]=เดสก์เล็ต Name[tr]=Masaüstü Uygulamacıkları Name[tr_TR]=Masaüstü Uygulamacıkları Name[uk]=Десклети Name[uk_UA]=Десклети Name[ur]=ڈیسکلیٹ Name[uz]=Десклетлар Name[uz@cyrillic]=Десклетлар Name[vi]=Tiểu trình màn hình Name[vi_VN]=Tiểu trình màn hình Name[zh_CN]=桌面小工具 Name[zh_HK]=桌面小工具 Name[zh_TW]=桌面小程式 Comment=Manage your Cinnamon desklets Comment[am]=የሲናሞን ዴስክሌትስ አስተዳዳሪ Comment[ar]=إدارة معلقات سطح المكتب Comment[ast]=Alministra los tos desklets de Cinnamon Comment[be]=Кiраванне дэсклетамi Cinnamon Comment[be@latin]=Кiраванне дэсклетамi Cinnamon Comment[be_BY]=Кiраванне дэсклетамi Cinnamon Comment[bg]=Управлявайте Вашите Cinnamon десклети Comment[bg_BG]=Управлявайте Вашите Cinnamon десклети Comment[bs]=Upravljajte vašim Cinnamon deskletima Comment[ca]=Gestioneu les vostres miniaplicacions d'escriptori al Cinnamon Comment[ca@valencia]=Administreu els desklets de Cinnamon Comment[ca_ES]=Gestioneu les vostres miniaplicacions d'escriptori al Cinnamon Comment[ca_ES@valencia]=Administreu els desklets de Cinnamon Comment[cs]=Správa Cinnamon deskletů Comment[cs_CZ]=Správa Cinnamon deskletů Comment[cy]=Rheolwch eich desglenni Cinnamon chi Comment[da]=Administrér dine Cinnamon-skrivebordsprogrammer Comment[da_DK]=Administrér dine Cinnamon-skrivebordsprogrammer Comment[de]=Cinnamon-Desklets verwalten Comment[de_CH]=Cinnamon-Desklets verwalten Comment[de_DE]=Cinnamon-Desklets verwalten Comment[el]=Διαχείριση των εφαρμογών οθόνης του Cinnamon Comment[es]=Administrar desklets de Cinnamon Comment[es_AR]=Administrar desklets de Cinnamon Comment[es_CL]=Administrar desklets de Cinnamon Comment[es_CO]=Administrar desklets de Cinnamon Comment[es_CR]=Administrar desklets de Cinnamon Comment[es_DO]=Administrar desklets de Cinnamon Comment[es_EC]=Administrar desklets de Cinnamon Comment[es_ES]=Administrar desklets de Cinnamon Comment[es_MX]=Administrar desklets de Cinnamon Comment[es_NI]=Administrar desklets de Cinnamon Comment[es_PA]=Administrar desklets de Cinnamon Comment[es_PE]=Administrar desklets de Cinnamon Comment[es_PR]=Administrar desklets de Cinnamon Comment[es_SV]=Administrar desklets de Cinnamon Comment[es_UY]=Administrar desklets de Cinnamon Comment[es_VE]=Administrar desklets de Cinnamon Comment[eu]=Kudeatu zure Cinnamon desklet-ak Comment[fa]=دسک‌لت‌های سینمون‌تان را مدیریت کنید Comment[fa_AF]=دسک‌لت‌های سینمون‌تان را مدیریت کنید Comment[fa_IR]=دسک‌لت‌های سینمون‌تان را مدیریت کنید Comment[fi]=Hallitse Cinnamon-sovelmia Comment[fi_FI]=Hallitse Cinnamon-sovelmia Comment[fr]=Gérez vos desklets Cinnamon Comment[fr_CA]=Gérer vos desklets Cinnamon Comment[fr_FR]=Gérez vos desklets Cinnamon Comment[gd]=Stiùirich na desklets Cinnamon agad Comment[gl]=Administra os trebellos do Cinnamon Comment[gl_ES]=Administra os trebellos do Cinnamon Comment[hr]=Upravljajte Cinnamon deskletima Comment[hu]=Cinnamon asztalkalmazások kezelése Comment[hu_HU]=Cinnamon asztalkalmazások kezelése Comment[ia]=Administrar tu desklets de Cinnamon Comment[id]=Atur desklet Cinnamon Comment[id_ID]=Atur desklet Cinnamon Comment[is]=Sýsla með stillingar fyrir Cinnamon skjáborðsgræjur (desklets) Comment[it]=Gestione dei desklets di Cinnamon Comment[it_CH]=Gestione dei desklets di Cinnamon Comment[it_IT]=Gestione dei desklets di Cinnamon Comment[ja]=Cinnamon デスクレット管理 Comment[ja_JP]=Cinnamon デスクレット管理 Comment[kab]=Sefrek tideskeltin-ik (m) n Cinnamon Comment[ko]=시나몬 데스크릿을 관리합니다 Comment[ko_KR]=시나몬 데스크릿을 관리합니다 Comment[lo]=ຈັດການເດສເລັດ Cinnamon ຂອງເຈົ້າ Comment[lo_LA]=ຈັດການເດສເລັດ Cinnamon ຂອງເຈົ້າ Comment[lt]=Tvarkyti Cinnamon ekrano programėles Comment[lt_LT]=Tvarkyti Cinnamon ekrano programėles Comment[lv]=Pārvaldīt savus Cinnamon sīkrīkus Comment[lv_LV]=Pārvaldīt savus Cinnamon sīkrīkus Comment[ms]=Mengurus desklet Cinnamon anda Comment[ms_MY]=Mengurus desklet Cinnamon anda Comment[nb]=Behandle Cinnamon-skrivebordsprogrammene dine Comment[nb_NO]=Behandle Cinnamon-skrivebordsprogrammene dine Comment[nds]=Cinnamon Desklets bearbeiten Comment[nl]=Beheer uw minitoepassingen voor Cinnamon Comment[nl_NL]=Beheer uw minitoepassingen voor Cinnamon Comment[oc]=Gerir vòstres desklets Cinnamon Comment[pl]=Zarządaj swoimi deskletami Cinnamona Comment[pl_PL]=Zarządaj swoimi deskletami Cinnamona Comment[pt]=Gerir as suas mini-aplicações do Cinnamon Comment[pt_BR]=Gerenciar os desklets do Cinnamon Comment[pt_PT]=Gerir as suas mini-aplicações do Cinnamon Comment[ro]=Gestionează deskleturile Cinnamon Comment[ro_RO]=Gestionează deskleturile Cinnamon Comment[ru]=Управление десклетами Cinnamon Comment[sk]=Spravovať desklety Cinnamon Comment[sk_SK]=Spravovať desklety Cinnamon Comment[sl]=Upravljajte z apleti namizja Cinnamona Comment[sl_SI]=Upravljajte z apleti namizja Cinnamona Comment[sq]=Menaxhoni desklet-ët tuaj në Cinnamon Comment[sr]=Управљање справицама Циметове површи Comment[sr@Latn]=Управљање справицама Циметове површи Comment[sr@ije]=Управљање справицама Циметове површи Comment[sr@ijekavianlatin]=Управљање справицама Циметове површи Comment[sr@latin]=Управљање справицама Циметове површи Comment[sr_RS]=Управљање справицама Циметове површи Comment[sr_RS@latin]=Управљање справицама Циметове површи Comment[sv]=Hantera Cinnamons skrivbordsprogram Comment[tg]=Идоракунии барномаҳои мизи кории Cinnamon Comment[th]=จัดการเดสก์เล็ต Cinnamon ของคุณ Comment[th_TH]=จัดการเดสก์เล็ต Cinnamon ของคุณ Comment[tr]=Cinnamon masaüstü uygulamacıklarını yönet Comment[tr_TR]=Cinnamon masaüstü uygulamacıklarını yönet Comment[uk]=Керування десклетами Cinnamon Comment[uk_UA]=Керування десклетами Cinnamon Comment[ur]=اپنے سنامون کے ڈیسکلیٹ کا انتظام کریں Comment[uz]=Синнамон десклетларни бошқариш Comment[uz@cyrillic]=Синнамон десклетларни бошқариш Comment[vi]=Quản lý tiểu dụng màn hình Cinnamon Comment[vi_VN]=Quản lý tiểu dụng màn hình Cinnamon Comment[zh_CN]=管理桌面小工具 Comment[zh_HK]=管理你的 Cinnamon 桌面小工具 Comment[zh_TW]=管理您的 Cinnamon 桌面小程式 Keywords=desklet;desktop;slideshow; Keywords[am]=ዴስክሌት : ዴስክቶፕ : ተንሸራታች : ማሳያ; Keywords[ar]=معلقات، سطح مكتب، عرش شرائح; Keywords[be]=дэсклет;працоўны стол;слайд-шоў; Keywords[be@latin]=дэсклет;працоўны стол;слайд-шоў; Keywords[be_BY]=дэсклет;працоўны стол;слайд-шоў; Keywords[bg]=десклет;работен плот;слайдшоу; Keywords[bg_BG]=десклет;работен плот;слайдшоу; Keywords[bs]=desklet;desktop;prezentacijski slajdovi; Keywords[ca]=desklet;escriptori;mostra de diapositives; Keywords[ca@valencia]=desklet;escriptori;presentació de diapositives; Keywords[ca_ES]=desklet;escriptori;mostra de diapositives; Keywords[ca_ES@valencia]=desklet;escriptori;presentació de diapositives; Keywords[cs]=desklet;plocha;prezentace; Keywords[cs_CZ]=desklet;plocha;prezentace; Keywords[cy]=desgled;bwrdd gwaith;sioesleidiau; Keywords[da]=skrivebordsprogram;skrivebord;slideshow; Keywords[da_DK]=skrivebordsprogram;skrivebord;slideshow; Keywords[de]=Desklet;Arbeitsfläche;Desktop;Schreibtisch;Diaschau;Diashow; Keywords[de_CH]=Desklet;Arbeitsfläche;Desktop;Schreibtisch;Diaschau;Diashow; Keywords[de_DE]=Desklet;Arbeitsfläche;Desktop;Schreibtisch;Diaschau;Diashow; Keywords[el]=εφαρμογές οθόνης;επιφάνεια εργασίας;προβολή διαφανειών; Keywords[es]=desklet;escritorio;presentación de diapositivas; Keywords[es_AR]=desklet;escritorio;presentación de diapositivas; Keywords[es_CL]=desklet;escritorio;presentación de diapositivas; Keywords[es_CO]=desklet;escritorio;presentación de diapositivas; Keywords[es_CR]=desklet;escritorio;presentación de diapositivas; Keywords[es_DO]=desklet;escritorio;presentación de diapositivas; Keywords[es_EC]=desklet;escritorio;presentación de diapositivas; Keywords[es_ES]=desklet;escritorio;presentación de diapositivas; Keywords[es_MX]=desklet;escritorio;presentación de diapositivas; Keywords[es_NI]=desklet;escritorio;presentación de diapositivas; Keywords[es_PA]=desklet;escritorio;presentación de diapositivas; Keywords[es_PE]=desklet;escritorio;presentación de diapositivas; Keywords[es_PR]=desklet;escritorio;presentación de diapositivas; Keywords[es_SV]=desklet;escritorio;presentación de diapositivas; Keywords[es_UY]=desklet;escritorio;presentación de diapositivas; Keywords[es_VE]=desklet;escritorio;presentación de diapositivas; Keywords[eu]=desklet;mahaigaina;diaporama; Keywords[fa]=دسک‌لت، دسکتاپ، اسلایدشو; Keywords[fa_AF]=دسک‌لت، دسکتاپ، اسلایدشو; Keywords[fa_IR]=دسک‌لت، دسکتاپ، اسلایدشو; Keywords[fi]=sovelma;työpöytä;diaesitys; Keywords[fi_FI]=sovelma;työpöytä;diaesitys; Keywords[fr]=desklet;bureau;diaporama; Keywords[fr_CA]=desklet;bureau;diaporama; Keywords[fr_FR]=desklet;bureau;diaporama; Keywords[ga]=deiscín;deasc;taispeántas sleamhnán; Keywords[gd]=desklet;desktop;slideshow;taisbeanadh-shleamhnagan; Keywords[gl]=trebello;escritorio;diaporama; Keywords[gl_ES]=trebello;escritorio;diaporama; Keywords[hr]=desklet;radna površina;promjena pozadine; Keywords[hu]=asztalkalmazás;asztal;diavetítés; Keywords[hu_HU]=asztalkalmazás;asztal;diavetítés; Keywords[ia]=desklet;scriptorio;presentation de photos; Keywords[is]=skjáborðsgræja;skjáborð;skyggnusýning; Keywords[ja]=デスクレット、デスクトップ、スライドショー; Keywords[ja_JP]=デスクレット、デスクトップ、スライドショー; Keywords[kab]=tadisklet;tanarit;tigri; Keywords[ko]=데스크릿;바탕화면;슬라이드쇼; Keywords[ko_KR]=데스크릿;바탕화면;슬라이드쇼; Keywords[lo]=ເດສເລັດ;ພື້ນທີ່ໜ້າຈໍ;ສະໄລໂຊວ໌; Keywords[lo_LA]=ເດສເລັດ;ພື້ນທີ່ໜ້າຈໍ;ສະໄລໂຊວ໌; Keywords[lt]=programėlė;darbalaukis;skaidrių rodymas; Keywords[lt_LT]=programėlė;darbalaukis;skaidrių rodymas; Keywords[lv]=sīkrīks;darbvirsma;slīdrāde; Keywords[lv_LV]=sīkrīks;darbvirsma;slīdrāde; Keywords[ms]=desklet;desktop;paparan slaid; Keywords[ms_MY]=desklet;desktop;paparan slaid; Keywords[nb]=skrivebordsprogram;skrivebord;bildefremvisning; Keywords[nb_NO]=skrivebordsprogram;skrivebord;bildefremvisning; Keywords[nds]=Desklet;Desktop;Diashow; Keywords[nl]=minitoepassing;bureaublad;diapresentatie; Keywords[nl_NL]=minitoepassing;bureaublad;diapresentatie; Keywords[pa]=ਡੈਸਕਲੇਟ;ਡੈਸਕਟਾੱਪ;ਸਲਾਇਡਸ਼ੋ; Keywords[pl]=desklet;pulpit;pokaz slajdów; Keywords[pl_PL]=desklet;pulpit;pokaz slajdów; Keywords[pt]=mini-aplicação;ambiente de trabalho;apresentação; Keywords[pt_BR]=desklet;área de trabalho;apresentação de slides; Keywords[pt_PT]=mini-aplicação;ambiente de trabalho;apresentação; Keywords[ru]=десклет;рабочий стол;слайд-шоу; Keywords[sk]=desklet;plocha;prezentácia; Keywords[sk_SK]=desklet;plocha;prezentácia; Keywords[sl]=aplet namizja;namizje;predstavitev; Keywords[sl_SI]=aplet namizja;namizje;predstavitev; Keywords[sq]=desklet;desktop;prezantim; Keywords[sr]=справица;површ;покретни приказ; Keywords[sr@Latn]=справица;површ;покретни приказ; Keywords[sr@ije]=справица;површ;покретни приказ; Keywords[sr@ijekavianlatin]=справица;површ;покретни приказ; Keywords[sr@latin]=справица;површ;покретни приказ; Keywords[sr_RS]=справица;површ;покретни приказ; Keywords[sr_RS@latin]=справица;површ;покретни приказ; Keywords[sv]=desklet;skrivbord;bildspel; Keywords[ta]=திரை நிரல்;பணிமேடை;சறுக்குகாட்சி; Keywords[ta_LK]=திரை நிரல்;பணிமேடை;சறுக்குகாட்சி; Keywords[tg]=барномаи мизи корӣ;мизи корӣ;намоиши слайдҳо; Keywords[th]=เดสก์เล็ต;พื้นโต๊ะ;การนำเสนอภาพนิ่ง; Keywords[th_TH]=เดสก์เล็ต;พื้นโต๊ะ;การนำเสนอภาพนิ่ง; Keywords[tr]=masaüstü uygulamacığı;masaüstü;slayt gösterisi; Keywords[tr_TR]=masaüstü uygulamacığı;masaüstü;slayt gösterisi; Keywords[uk]=десклет;стільниця;показ слайдів; Keywords[uk_UA]=десклет;стільниця;показ слайдів; Keywords[ur]=ڈیسکلیٹ، ڈیسک ٹاپ، سلائیدشو; Keywords[uz]=десклет;иш столи;слайд-шоу; Keywords[uz@cyrillic]=десклет;иш столи;слайд-шоу; Keywords[vi]=tiểu trình màn hình làm việc;màn hình làm việc;trình chiếu; Keywords[vi_VN]=tiểu trình màn hình làm việc;màn hình làm việc;trình chiếu; Keywords[zh_CN]=桌面小工具、桌面、背景切换; Keywords[zh_HK]=桌面小工具;桌面;幻燈片; Keywords[zh_TW]=桌面小程式;桌面;幻燈片放映; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-notifications.desktop0000664000175000017500000002611313215735076027636 0ustar fabiofabio[Desktop Entry] Icon=cs-notifications Exec=cinnamon-settings notifications Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Notifications Name[af]=Kennisgewings Name[am]=ማስታወቂያዎች Name[ar]=الإشعارات Name[ast]=Notificaciones Name[az]=Bildirişlər Name[az_AZ]=Bildirişlər Name[be]=Паведамленні Name[be@latin]=Паведамленні Name[be_BY]=Паведамленні Name[bg]=Известявания Name[bg_BG]=Известявания Name[bn]=বিজ্ঞপ্তিসমূহ Name[bn_IN]=বিজ্ঞপ্তিসমূহ Name[bs]=Obavještenja Name[ca]=Notificacions Name[ca@valencia]=Notificacions Name[ca_ES]=Notificacions Name[ca_ES@valencia]=Notificacions Name[crh]=bildirimler Name[cs]=Oznámení Name[cs_CZ]=Oznámení Name[cy]=Hysbysiadau Name[da]=Meddelelser Name[da_DK]=Meddelelser Name[de]=Meldungen Name[de_CH]=Meldungen Name[de_DE]=Meldungen Name[el]=Ειδοποιήσεις Name[eo]=Atentigoj Name[es]=Notificaciones Name[es_AR]=Notificaciones Name[es_CL]=Notificaciones Name[es_CO]=Notificaciones Name[es_CR]=Notificaciones Name[es_DO]=Notificaciones Name[es_EC]=Notificaciones Name[es_ES]=Notificaciones Name[es_MX]=Notificaciones Name[es_NI]=Notificaciones Name[es_PA]=Notificaciones Name[es_PE]=Notificaciones Name[es_PR]=Notificaciones Name[es_SV]=Notificaciones Name[es_UY]=Notificaciones Name[es_VE]=Notificaciones Name[et]=Teavitused Name[et_EE]=Teavitused Name[eu]=Jakinarazpenak Name[fa]=هشدارها Name[fa_AF]=هشدارها Name[fa_IR]=هشدارها Name[fi]=Ilmoitukset Name[fi_FI]=Ilmoitukset Name[fil]=Mga Abiso Name[fr_CA]=Avis Name[fy]=Notifikaasjes Name[ga]=Fógraí Name[gd]=Brathan Name[gl]=Notificacións Name[gl_ES]=Notificacións Name[he]=התרעות Name[he_IL]=התרעות Name[hr]=Obavijesti Name[hu]=Értesítések Name[hu_HU]=Értesítések Name[hy]=Ծանուցումներ Name[ia]=Notificationes Name[id]=Pemberitahuan Name[id_ID]=Pemberitahuan Name[is]=Tilkynningar Name[it]=Notifiche Name[it_CH]=Notifiche Name[it_IT]=Notifiche Name[ja]=通知メッセージ Name[ja_JP]=通知メッセージ Name[kab]=Tilɣa Name[kk]=Мәлімдемелер Name[km]=ការ​ជូនដំណឹង​ Name[km_KH]=ការ​ជូនដំណឹង​ Name[ko]=알림 Name[ko_KR]=알림 Name[lo]=ການແຈ້ງເຕືອນ Name[lo_LA]=ການແຈ້ງເຕືອນ Name[lt]=Pranešimai Name[lt_LT]=Pranešimai Name[lv]=Paziņojumi Name[lv_LV]=Paziņojumi Name[ml]=അറിയിപ്പുകൾ Name[mr]=सूचना Name[ms]=Pemberitahuan Name[ms_MY]=Pemberitahuan Name[nb]=Varslinger Name[nb_NO]=Varslinger Name[nds]=Benachrichtigungen Name[ne]=सूचना Name[nl]=Meldingen Name[nl_NL]=Meldingen Name[oc]=Notificacions Name[pa]=ਸੂਚਨਾਵਾਂ Name[pl]=Powiadomienia Name[pl_PL]=Powiadomienia Name[pt]=Notificações Name[pt_BR]=Notificações Name[pt_PT]=Notificações Name[ro]=Notificări Name[ro_RO]=Notificări Name[ru]=Уведомления Name[sc]=Notìficas Name[sk]=Oznámenia Name[sk_SK]=Oznámenia Name[sl]=Obvestila Name[sl_SI]=Obvestila Name[sq]=Njoftimet Name[sr]=Обавештења Name[sr@Latn]=Obaveštenja Name[sr@ije]=Обавештења Name[sr@ijekavianlatin]=Обавештења Name[sr@latin]=Obaveštenja Name[sr_RS]=Обавештења Name[sr_RS@latin]=Obaveštenja Name[sv]=Notiser Name[sw]=Taarifa Name[ta]=அறிவிப்புகள் Name[ta_LK]=அறிவிப்புகள் Name[te]=గమనింపులు Name[tg]=Огоҳиҳо Name[th]=การแจ้งเตือน Name[th_TH]=การแจ้งเตือน Name[tl]=Mga Abiso Name[tr]=Bildirimler Name[tr_TR]=Bildirimler Name[tt]=Хәбәр итү Name[tt@iqtelif]=Хәбәр итү Name[uk]=Сповіщення Name[uk_UA]=Сповіщення Name[ur]=اطلاعات Name[uz]=Эслатмалар Name[uz@cyrillic]=Эслатмалар Name[vi]=Thông báo Name[vi_VN]=Thông báo Name[xh]=Izaziso Name[zh_CN]=通知 Name[zh_HK]=通知 Name[zh_TW]=通知 Comment=Notification preferences Comment[am]=የ ማስታወቂያ ምርጫዎች Comment[ar]=تفضيلات التنبيهات Comment[ast]=Preferencies de les notificaciones Comment[bg]=Настройки за известяване Comment[bg_BG]=Настройки за известяване Comment[ca]=Preferències de notificació Comment[ca@valencia]=Preferències de notificació Comment[ca_ES]=Preferències de notificació Comment[ca_ES@valencia]=Preferències de notificació Comment[cs]=Nastavení notifikací Comment[cs_CZ]=Nastavení notifikací Comment[cy]=Dewisiadau hysbysiad Comment[da]=Indstillinger for meddelelser Comment[da_DK]=Indstillinger for meddelelser Comment[de]=Benachrichtigungseinstellungen Comment[de_CH]=Benachrichtigungseinstellungen Comment[de_DE]=Benachrichtigungseinstellungen Comment[el]=Προτιμήσεις ειδοποιήσεων Comment[es]=Preferencias de notificación Comment[es_AR]=Preferencias de notificación Comment[es_CL]=Preferencias de notificación Comment[es_CO]=Preferencias de notificación Comment[es_CR]=Preferencias de notificación Comment[es_DO]=Preferencias de notificación Comment[es_EC]=Preferencias de notificación Comment[es_ES]=Preferencias de notificación Comment[es_MX]=Preferencias de notificación Comment[es_NI]=Preferencias de notificación Comment[es_PA]=Preferencias de notificación Comment[es_PE]=Preferencias de notificación Comment[es_PR]=Preferencias de notificación Comment[es_SV]=Preferencias de notificación Comment[es_UY]=Preferencias de notificación Comment[es_VE]=Preferencias de notificación Comment[eu]=Jakinerazpenen hobespenak Comment[fi]=Ilmoitusten asetukset Comment[fi_FI]=Ilmoitusten asetukset Comment[fr]=Préférences des notifications Comment[fr_CA]=Préférences des notifications Comment[fr_FR]=Préférences des notifications Comment[gd]=Roghainnean nam brathan Comment[gl]=Preferencias da notificación Comment[gl_ES]=Preferencias da notificación Comment[hr]=Osobitosti obavijesti Comment[hu]=Értesítések beállításai Comment[hu_HU]=Értesítések beállításai Comment[ia]=Preferentias de notification Comment[id]=Preferensi notifikasi Comment[id_ID]=Preferensi notifikasi Comment[is]=Valkostir kerfistilkynninga Comment[it]=Preferenze di notifica Comment[it_CH]=Preferenze di notifica Comment[it_IT]=Preferenze di notifica Comment[ja]=通知設定 Comment[ja_JP]=通知設定 Comment[ko]=알림 설정 Comment[ko_KR]=알림 설정 Comment[lt]=Pranešimų nuostatos Comment[lt_LT]=Pranešimų nuostatos Comment[ms]=Tetapan notifikasi Comment[ms_MY]=Tetapan notifikasi Comment[nb]=Varslingsinnstillinger Comment[nb_NO]=Varslingsinnstillinger Comment[nds]=Benachrichtigungseinstellungen Comment[nl]=Meldingsvoorkeuren Comment[nl_NL]=Meldingsvoorkeuren Comment[oc]=Preferéncias de las notificacions Comment[pl]=Preferencje powiadamiania Comment[pl_PL]=Preferencje powiadamiania Comment[pt]=Preferências de notificação Comment[pt_BR]=Preferências de notificação Comment[pt_PT]=Preferências de notificação Comment[ro]=Preferințe notificări Comment[ro_RO]=Preferințe notificări Comment[ru]=Настройки уведомлений Comment[sk]=Predvoľby oznámení Comment[sk_SK]=Predvoľby oznámení Comment[sl]=Možnosti obvestil Comment[sl_SI]=Možnosti obvestil Comment[sq]=Parapëlqimet e njoftimeve Comment[sr]=Поставке обавештења Comment[sr@Latn]=Поставке обавештења Comment[sr@ije]=Поставке обавештења Comment[sr@ijekavianlatin]=Поставке обавештења Comment[sr@latin]=Поставке обавештења Comment[sr_RS]=Поставке обавештења Comment[sr_RS@latin]=Поставке обавештења Comment[sv]=Inställningar för Notiser Comment[th]=ตั้งค่าการแจ้งเตือน Comment[th_TH]=ตั้งค่าการแจ้งเตือน Comment[tr]=Bildirim tercihleri Comment[tr_TR]=Bildirim tercihleri Comment[uk]=Налаштування сповіщень Comment[uk_UA]=Налаштування сповіщень Comment[ur]=اطلاعیہ ترجیحات Comment[vi]=Tùy thích thông báo Comment[vi_VN]=Tùy thích thông báo Comment[zh_CN]=通知设置 Comment[zh_HK]=通知喜好設定 Comment[zh_TW]=通知偏好設定 Keywords=notifications; Keywords[am]=ማስታወቂያዎች; Keywords[ar]=التنبيهات; Keywords[ast]=notificaciones; Keywords[bg]=известяване; Keywords[bg_BG]=известяване; Keywords[ca]=notificacions; Keywords[ca@valencia]=notificacions; Keywords[ca_ES]=notificacions; Keywords[ca_ES@valencia]=notificacions; Keywords[cs]=upozornění; Keywords[cs_CZ]=upozornění; Keywords[cy]=hysbysiadau; Keywords[da]=meddelelser; Keywords[da_DK]=meddelelser; Keywords[de]=Benachrichtigungen; Keywords[de_CH]=Benachrichtigungen; Keywords[de_DE]=Benachrichtigungen; Keywords[el]=ειδοποιήσεις; Keywords[es]=notificaciones; Keywords[es_AR]=notificaciones; Keywords[es_CL]=notificaciones; Keywords[es_CO]=notificaciones; Keywords[es_CR]=notificaciones; Keywords[es_DO]=notificaciones; Keywords[es_EC]=notificaciones; Keywords[es_ES]=notificaciones; Keywords[es_MX]=notificaciones; Keywords[es_NI]=notificaciones; Keywords[es_PA]=notificaciones; Keywords[es_PE]=notificaciones; Keywords[es_PR]=notificaciones; Keywords[es_SV]=notificaciones; Keywords[es_UY]=notificaciones; Keywords[es_VE]=notificaciones; Keywords[eu]=jakinarazpenak; Keywords[fi]=ilmoitukset; Keywords[fi_FI]=ilmoitukset; Keywords[gd]=brathan; Keywords[gl]=notificacións; Keywords[gl_ES]=notificacións; Keywords[hr]=obavijesti; Keywords[hu]=értesítések; Keywords[hu_HU]=értesítések; Keywords[ia]=notificationes; Keywords[id]=notifikasi; Keywords[id_ID]=notifikasi; Keywords[is]=tilkynningar; Keywords[it]=notifiche; Keywords[it_CH]=notifiche; Keywords[it_IT]=notifiche; Keywords[ja]=通知; Keywords[ja_JP]=通知; Keywords[ko]=알림; Keywords[ko_KR]=알림; Keywords[lt]=pranešimai; Keywords[lt_LT]=pranešimai; Keywords[ms]=notifikasi; Keywords[ms_MY]=notifikasi; Keywords[nb]=varslinger; Keywords[nb_NO]=varslinger; Keywords[nds]=Benachrichtigungen; Keywords[nl]=meldingen; Keywords[nl_NL]=meldingen; Keywords[oc]=notificacions; Keywords[pl]=powiadomienia; Keywords[pl_PL]=powiadomienia; Keywords[pt]=notificações; Keywords[pt_BR]=notificações; Keywords[pt_PT]=notificações; Keywords[ro]=notificări; Keywords[ro_RO]=notificări; Keywords[ru]=уведомления; Keywords[sk]=oznámenia; Keywords[sk_SK]=oznámenia; Keywords[sl]=obvestila; Keywords[sl_SI]=obvestila; Keywords[sr]=обавештења; Keywords[sr@Latn]=обавештења; Keywords[sr@ije]=обавештења; Keywords[sr@ijekavianlatin]=обавештења; Keywords[sr@latin]=обавештења; Keywords[sr_RS]=обавештења; Keywords[sr_RS@latin]=обавештења; Keywords[sv]=notiser; Keywords[th]=การแจ้งเตือน; Keywords[th_TH]=การแจ้งเตือน; Keywords[tr]=bildirimler; Keywords[tr_TR]=bildirimler; Keywords[uk]=сповіщення; Keywords[uk_UA]=сповіщення; Keywords[ur]=اطلاعات; Keywords[vi]=thông báo; Keywords[vi_VN]=thông báo; Keywords[zh_CN]=通知; Keywords[zh_HK]=通知; Keywords[zh_TW]=通知; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-startup.desktop0000664000175000017500000004312713215735076026473 0ustar fabiofabio[Desktop Entry] Icon=cs-startup-programs Exec=cinnamon-settings startup Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Startup Applications Name[am]=መተግበሪያዎች ማስጀመሪያ Name[ar]=برامج بدء التشغيل Name[ast]=Aplicaciones d'aniciu Name[bg]=Автоматично стартирани програми Name[bg_BG]=Автоматично стартирани програми Name[ca]=Aplicacions a l'inici Name[ca@valencia]=Aplicacions a l'inici Name[ca_ES]=Aplicacions a l'inici Name[ca_ES@valencia]=Aplicacions a l'inici Name[cs]=Aplikace spouštěné při přihlášení Name[cs_CZ]=Aplikace spouštěné při přihlášení Name[cy]=Rhaglenni Cychwyn Name[da]=Opstartsprogrammer Name[da_DK]=Opstartsprogrammer Name[de]=Startprogramme Name[de_CH]=Startprogramme Name[de_DE]=Startprogramme Name[el]=Προγράμματα εκκίνησης Name[eo]=Aplikaĵoj post startigo Name[es]=Aplicaciones al inicio Name[es_AR]=Aplicaciones al inicio Name[es_CL]=Aplicaciones al inicio Name[es_CO]=Aplicaciones al inicio Name[es_CR]=Aplicaciones al inicio Name[es_DO]=Aplicaciones al inicio Name[es_EC]=Aplicaciones al inicio Name[es_ES]=Aplicaciones al inicio Name[es_MX]=Aplicaciones al inicio Name[es_NI]=Aplicaciones al inicio Name[es_PA]=Aplicaciones al inicio Name[es_PE]=Aplicaciones al inicio Name[es_PR]=Aplicaciones al inicio Name[es_SV]=Aplicaciones al inicio Name[es_UY]=Aplicaciones al inicio Name[es_VE]=Aplicaciones al inicio Name[et]=Käivitatavad rakendused Name[et_EE]=Käivitatavad rakendused Name[eu]=Abioko aplikazioak Name[fi]=Käynnistettävät sovellukset Name[fi_FI]=Käynnistettävät sovellukset Name[fr]=Applications au démarrage Name[fr_CA]=Applications lancées au démarrage Name[fr_FR]=Applications au démarrage Name[fy]=Opstart Applikaasjes Name[gd]=Aplacaidean tòiseachaidh Name[gl]=Aplicativos de inicio Name[gl_ES]=Aplicativos de inicio Name[hr]=Pokrenute aplikacije Name[hu]=Indítópult Name[hu_HU]=Indítópult Name[ia]=Applicationes de initio Name[id]=Aplikasi Permulaan Name[id_ID]=Aplikasi Permulaan Name[is]=Ræsiforrit Name[it]=Applicazioni d'avvio Name[it_CH]=Applicazioni d'avvio Name[it_IT]=Applicazioni d'avvio Name[ja]=自動起動のアプリケーション Name[ja_JP]=自動起動のアプリケーション Name[ko]=시작 애플리케이션 Name[ko_KR]=시작 애플리케이션 Name[lo]=ໂປຣແກຣມເລີ່ມລະບົບ Name[lo_LA]=ໂປຣແກຣມເລີ່ມລະບົບ Name[lt]=Paleisties programos Name[lt_LT]=Paleisties programos Name[ms]=Aplikasi Permulaan Name[ms_MY]=Aplikasi Permulaan Name[nb]=Oppstartsprogrammer Name[nb_NO]=Oppstartsprogrammer Name[nds]=Systemstartprogramme Name[nl]=Opstarttoepassingen Name[nl_NL]=Opstarttoepassingen Name[oc]=Aplicacions a l'aviada Name[pl]=Programy startowe Name[pl_PL]=Programy startowe Name[pt]=Aplicações de Arranque Name[pt_BR]=Aplicativos de Inicialização Name[pt_PT]=Aplicações de Arranque Name[ro]=Aplicații lansate la pornire Name[ro_RO]=Aplicații lansate la pornire Name[ru]=Автозагрузка Name[sk]=Aplikácie po spustení Name[sk_SK]=Aplikácie po spustení Name[sl]=Začetni programi Name[sl_SI]=Začetni programi Name[sq]=Programet në nisje Name[sr]=Почетни програми Name[sr@Latn]=Почетни програми Name[sr@ije]=Почетни програми Name[sr@ijekavianlatin]=Почетни програми Name[sr@latin]=Почетни програми Name[sr_RS]=Почетни програми Name[sr_RS@latin]=Почетни програми Name[sv]=Uppstartsprogram Name[th]=โปรแกรมเริ่มวาระ Name[th_TH]=โปรแกรมเริ่มวาระ Name[tr]=Başlangıç Uygulamaları Name[tr_TR]=Başlangıç Uygulamaları Name[uk]=Самозапуск проґрам Name[uk_UA]=Самозапуск проґрам Name[ur]=کمپیوڑر آغاز کی ایپلی کیشنز Name[vi]=Ứng dụng Khởi chạy Name[vi_VN]=Ứng dụng Khởi chạy Name[zh_CN]=开机自启动程序 Name[zh_HK]=初始啟動程式 Name[zh_TW]=系統啟動應用程式 Comment=Manage your startup applications Comment[am]=የሚጀምሩ መተግባሪያዎች አስተዳዳሪ Comment[bg]=Управление на стартиращите приложения Comment[bg_BG]=Управление на стартиращите приложения Comment[ca]=Gestioneu les vostres aplicacions d'inici Comment[ca@valencia]=Gestioneu les vostres aplicacions d'inici Comment[ca_ES]=Gestioneu les vostres aplicacions d'inici Comment[ca_ES@valencia]=Gestioneu les vostres aplicacions d'inici Comment[cs]=Spravovat vaše aplikace při spuštění Comment[cs_CZ]=Spravovat vaše aplikace při spuštění Comment[cy]=Rheoli eich rhaglenni cychwyn Comment[da]=Håndtér dine opstartsprogrammer Comment[da_DK]=Håndtér dine opstartsprogrammer Comment[de]=Ihre Startprogramme verwalten Comment[de_CH]=Ihre Startprogramme verwalten Comment[de_DE]=Ihre Startprogramme verwalten Comment[el]=Διαχείριση των εφαρμογών εκκίνησης σου Comment[es]=Gestionar las aplicaciones de inicio Comment[es_AR]=Gestionar las aplicaciones de inicio Comment[es_CL]=Gestionar las aplicaciones de inicio Comment[es_CO]=Gestionar las aplicaciones de inicio Comment[es_CR]=Gestionar las aplicaciones de inicio Comment[es_DO]=Gestionar las aplicaciones de inicio Comment[es_EC]=Gestionar las aplicaciones de inicio Comment[es_ES]=Gestionar las aplicaciones de inicio Comment[es_MX]=Gestionar las aplicaciones de inicio Comment[es_NI]=Gestionar las aplicaciones de inicio Comment[es_PA]=Gestionar las aplicaciones de inicio Comment[es_PE]=Gestionar las aplicaciones de inicio Comment[es_PR]=Gestionar las aplicaciones de inicio Comment[es_SV]=Gestionar las aplicaciones de inicio Comment[es_UY]=Gestionar las aplicaciones de inicio Comment[es_VE]=Gestionar las aplicaciones de inicio Comment[eu]=Kudeatu zure abioko aplikazioak Comment[fi]=Hallinnoi automaattisesti käynnistyviä sovelluksia Comment[fi_FI]=Hallinnoi automaattisesti käynnistyviä sovelluksia Comment[fr]=Gérez vos applications au démarrage Comment[fr_CA]=Gérez vos applications au démarrage Comment[fr_FR]=Gérez vos applications au démarrage Comment[gd]=Stiùirich na h-aplacaidean tòiseachaidh agad Comment[gl]=Administrar os seus aplicativos do inicio Comment[gl_ES]=Administrar os seus aplicativos do inicio Comment[hr]=Upravljajte vašim pokrenutim aplikacijama Comment[hu]=Bejelentkezéskor elindítandó alkalmazások Comment[hu_HU]=Bejelentkezéskor elindítandó alkalmazások Comment[ia]=Administrar tu applicationes de lanceamento initial Comment[is]=Sýsla með forrit virkjuð í ræsingu Comment[it]=Gestisci le tue applicazioni di avvio Comment[it_CH]=Gestisci le tue applicazioni di avvio Comment[it_IT]=Gestisci le tue applicazioni di avvio Comment[ko]=여러분의 시작 애플리케이션을 관리하세요 Comment[ko_KR]=여러분의 시작 애플리케이션을 관리하세요 Comment[lt]=Valdykite savo paleidžiamas programas Comment[lt_LT]=Valdykite savo paleidžiamas programas Comment[ms]=Urus aplikasi permulaan anda Comment[ms_MY]=Urus aplikasi permulaan anda Comment[nb]=Håndter dine oppstartsprogrammer Comment[nb_NO]=Håndter dine oppstartsprogrammer Comment[nds]=Startanwendungen verwalten Comment[nl]=Beheer uw opstarttoepassingen Comment[nl_NL]=Beheer uw opstarttoepassingen Comment[oc]=Gerissètz vòstras aplicacions a l'aviada Comment[pl]=Zarządzaj programami startowymi Comment[pl_PL]=Zarządzaj programami startowymi Comment[pt]=Gerir as suas aplicações de arranque Comment[pt_BR]=Gerencie seus aplicativos de inicialização Comment[pt_PT]=Gerir as suas aplicações de arranque Comment[ro]=Gestionează aplicațiile lansate la pornire Comment[ro_RO]=Gestionează aplicațiile lansate la pornire Comment[ru]=Управление автозапускаемыми приложениями Comment[sk]=Spravovať aplikácie spúšťané automaticky po spustení pc Comment[sk_SK]=Spravovať aplikácie spúšťané automaticky po spustení pc Comment[sq]=Menaxhoni programet tuaja të nisjes Comment[sr]=Управљање почетним програмиам Comment[sr@Latn]=Управљање почетним програмиам Comment[sr@ije]=Управљање почетним програмиам Comment[sr@ijekavianlatin]=Управљање почетним програмиам Comment[sr@latin]=Управљање почетним програмиам Comment[sr_RS]=Управљање почетним програмиам Comment[sr_RS@latin]=Управљање почетним програмиам Comment[sv]=Hantera dina uppstartsprogram Comment[th]=จัดการโปรแกรมเริ่มวาระของคุณ Comment[th_TH]=จัดการโปรแกรมเริ่มวาระของคุณ Comment[tr]=Başlangıç uygulamalarınızı yönetin Comment[tr_TR]=Başlangıç uygulamalarınızı yönetin Comment[uk]=Керування запуском Ваших додатків Comment[uk_UA]=Керування запуском Ваших додатків Comment[ur]=کمپیوڑر آغاز کی ایپلی کیشنز کا انتطام کریں Comment[vi]=Quản lý ứng dụng khởi chạy của bạn Comment[vi_VN]=Quản lý ứng dụng khởi chạy của bạn Comment[zh_CN]=管理启动程序 Comment[zh_HK]=管理你的始動應用程式 Comment[zh_TW]=管理您的系統啟動應用程式 Keywords=startup;programs;boot;init;session; Keywords[am]=የሚጀምሩ: ፕሮግራሞች: boot: ማስጀመሪያ: ክፍለ ጊዜ; Keywords[ar]=بداية تشغيل، برامج، إقلاع، تهيئة، دورة; Keywords[ast]=aniciu;programes;arranque;init;sesión; Keywords[be]=аўтазапуск;праграмы;загрузкі;инициализация;сесія; Keywords[be@latin]=аўтазапуск;праграмы;загрузкі;инициализация;сесія; Keywords[be_BY]=аўтазапуск;праграмы;загрузкі;инициализация;сесія; Keywords[bg]=стартиране;програми;сесия; Keywords[bg_BG]=стартиране;програми;сесия; Keywords[bs]=početak;programi;boot;inicijalizacija;sesija; Keywords[ca]=inici;programes;arrencada;init;sessió; Keywords[ca@valencia]=inici;programes;arrancada;inicialisar;sessió; Keywords[ca_ES]=inici;programes;arrencada;init;sessió; Keywords[ca_ES@valencia]=inici;programes;arrancada;inicialisar;sessió; Keywords[cs]=zapínání;programy;boot;zahájení;sezení; Keywords[cs_CZ]=zapínání;programy;boot;zahájení;sezení; Keywords[cy]=cychwyn;rhaglenni;ymgychwyn;init;sesiwn; Keywords[da]=opstart;programmer;boot;init;session; Keywords[da_DK]=opstart;programmer;boot;init;session; Keywords[de]=Start;Programme;Anwendungen;Startvorgang;Boot;initialisieren;Sitzung; Keywords[de_CH]=Start;Programme;Anwendungen;Startvorgang;Boot;initialisieren;Sitzung; Keywords[de_DE]=Start;Programme;Anwendungen;Startvorgang;Boot;initialisieren;Sitzung; Keywords[el]=έναρξη;προγράμματα;εκκίνηση;συνεδρία; Keywords[en_GB]=start-up;programs;boot;init;session; Keywords[es]=inicio;programas;arranque;init;sesión; Keywords[es_AR]=inicio;programas;arranque;init;sesión; Keywords[es_CL]=inicio;programas;arranque;init;sesión; Keywords[es_CO]=inicio;programas;arranque;init;sesión; Keywords[es_CR]=inicio;programas;arranque;init;sesión; Keywords[es_DO]=inicio;programas;arranque;init;sesión; Keywords[es_EC]=inicio;programas;arranque;init;sesión; Keywords[es_ES]=inicio;programas;arranque;init;sesión; Keywords[es_MX]=inicio;programas;arranque;init;sesión; Keywords[es_NI]=inicio;programas;arranque;init;sesión; Keywords[es_PA]=inicio;programas;arranque;init;sesión; Keywords[es_PE]=inicio;programas;arranque;init;sesión; Keywords[es_PR]=inicio;programas;arranque;init;sesión; Keywords[es_SV]=inicio;programas;arranque;init;sesión; Keywords[es_UY]=inicio;programas;arranque;init;sesión; Keywords[es_VE]=inicio;programas;arranque;init;sesión; Keywords[eu]=abiaraztea;programak;abioa;init;saioa; Keywords[fa]=راه‌اندازی، برنامه‌ها، بوت، اینیت، نشست; Keywords[fa_AF]=راه‌اندازی، برنامه‌ها، بوت، اینیت، نشست; Keywords[fa_IR]=راه‌اندازی، برنامه‌ها، بوت، اینیت، نشست; Keywords[fi]=käynnistys;ohjelmat;boot;init;istunto; Keywords[fi_FI]=käynnistys;ohjelmat;boot;init;istunto; Keywords[fr]=demarrer;programmes;boot;init;session; Keywords[fr_CA]=demarrer;programmes;boot;init;session; Keywords[fr_FR]=demarrer;programmes;boot;init;session; Keywords[fy]=tariedings;applikaasjes;boot;init;sessy; Keywords[ga]=tosaigh;cláir;bútáil;init;seisiún; Keywords[gd]=tòiseachadh;prògraman;bùtadh;init;seisean;startup;programs;boot;session; Keywords[gl]=inicio;programas;arrinque;sesión; Keywords[gl_ES]=inicio;programas;arrinque;sesión; Keywords[hr]=pokrenuti;programi;pokretanje računala;pokretanje programa;sesija; Keywords[hu]=indítás;programok;boot;folyamat;munkamenet; Keywords[hu_HU]=indítás;programok;boot;folyamat;munkamenet; Keywords[ia]=lanceamento initial;programmas;lanceamento initial;init;session; Keywords[id]=startup;program;boot;init;sesi; Keywords[id_ID]=startup;program;boot;init;sesi; Keywords[is]=ræsing;forrit;ræsiforrit;init;seta; Keywords[it]=avvio;programmi;boot;init;sessione; Keywords[it_CH]=avvio;programmi;boot;init;sessione; Keywords[it_IT]=avvio;programmi;boot;init;sessione; Keywords[ja]=スタートアップ、プログラム、ブート、init、セッション; Keywords[ja_JP]=スタートアップ、プログラム、ブート、init、セッション; Keywords[ko]=시작;프로그램;시동;초기화;세션; Keywords[ko_KR]=시작;프로그램;시동;초기화;세션; Keywords[lo]=ເລີ່ມລະບົບ;ໂປຣແກຣມ;ເລີ່ມລະບົບ;init;session; Keywords[lo_LA]=ເລີ່ມລະບົບ;ໂປຣແກຣມ;ເລີ່ມລະບົບ;init;session; Keywords[lt]=pradžioje;programos;paleistis;įkrovimas;seansas; Keywords[lt_LT]=pradžioje;programos;paleistis;įkrovimas;seansas; Keywords[lv]=starta;programmas;sāknēšanas;inicializācija;sesija; Keywords[lv_LV]=starta;programmas;sāknēšanas;inicializācija;sesija; Keywords[ms]=permulaan;program;but;init;sesi; Keywords[ms_MY]=permulaan;program;but;init;sesi; Keywords[nb]=oppstart;programmer;boot;init;sessjon; Keywords[nb_NO]=oppstart;programmer;boot;init;sessjon; Keywords[nds]=Autostart;Programme;Boot;Initialisierung;Sitzung; Keywords[nl]=opstarten;programma's;opstart;init;sessie; Keywords[nl_NL]=opstarten;programma's;opstart;init;sessie; Keywords[pa]=ਸਟਾਰਟਅੱਪ;ਕਾਰਜਾਂ;ਬੂਟ;ਇਨਿਟ;ਸ਼ੈਸ਼ਨ; Keywords[pl]=startup;programy;boot;inicjalizacja;sesja; Keywords[pl_PL]=startup;programy;boot;inicjalizacja;sesja; Keywords[pt]=arranque;programas;boot;init;sessão; Keywords[pt_BR]=inicialização;programas;boot;init;sessão; Keywords[pt_PT]=arranque;programas;boot;init;sessão; Keywords[ro]=pornire;programe;boot;init;sesiune; Keywords[ro_RO]=pornire;programe;boot;init;sesiune; Keywords[ru]=запуск;программы;загрузка;инициализация;сессия; Keywords[sk]=spustenie;programy;boot;zavedenie;sedenie;relácia; Keywords[sk_SK]=spustenie;programy;boot;zavedenie;sedenie;relácia; Keywords[sl]=začetni;programi;zagon;začenjanje;seja; Keywords[sl_SI]=začetni;programi;zagon;začenjanje;seja; Keywords[sq]=nisje;programe;boot;init;seancë; Keywords[sr]=покретање;програми;учитавање;почетни;сесија; Keywords[sr@Latn]=покретање;програми;учитавање;почетни;сесија; Keywords[sr@ije]=покретање;програми;учитавање;почетни;сесија; Keywords[sr@ijekavianlatin]=покретање;програми;учитавање;почетни;сесија; Keywords[sr@latin]=покретање;програми;учитавање;почетни;сесија; Keywords[sr_RS]=покретање;програми;учитавање;почетни;сесија; Keywords[sr_RS@latin]=покретање;програми;учитавање;почетни;сесија; Keywords[sv]=uppstart;program;boot;init;session; Keywords[ta]=தொடக்கம்;நிரல்கள்;துவக்கம்;ஆரம்பம்;அமர்வு; Keywords[ta_LK]=தொடக்கம்;நிரல்கள்;துவக்கம்;ஆரம்பம்;அமர்வு; Keywords[tg]=оғози кор;барномаҳо;роҳандозӣ;init;ҷаласа; Keywords[th]=โปรแกรมเมื่อเริ่มระบบ;โปรแกรม;เริ่มระบบ;การเริ่มต้น;วาระ; Keywords[th_TH]=โปรแกรมเมื่อเริ่มระบบ;โปรแกรม;เริ่มระบบ;การเริ่มต้น;วาระ; Keywords[tr]=başlangış;uygulamalar;açılış;başlatma;oturum; Keywords[tr_TR]=başlangış;uygulamalar;açılış;başlatma;oturum; Keywords[uk]=запуск;проґрами;завантаження;ініціялізація;сесія; Keywords[uk_UA]=запуск;проґрами;завантаження;ініціялізація;сесія; Keywords[ur]=سٹارٹ اپ، آغازیہ، بوٹ، ان اٹ، سیشن، دورانیہ، نشست; Keywords[vi]=khởi động;chương trình;khởi động;khởi tạo;phiên; Keywords[vi_VN]=khởi động;chương trình;khởi động;khởi tạo;phiên; Keywords[zh_CN]=startup;programs;boot;init;session;启动;程序;开机;初始化;会话; Keywords[zh_HK]=始動;程式;開機;起始;作業階段; Keywords[zh_TW]=系統啟動;程式;開機;起始;作業階段; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-fonts.desktop0000664000175000017500000003512613215735076026122 0ustar fabiofabio[Desktop Entry] Icon=cs-fonts Exec=cinnamon-settings fonts Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Fonts Name[am]=ፊደሎች Name[ar]=الخطوط Name[ast]=Fontes Name[be]=Шрыфты Name[be@latin]=Шрыфты Name[be_BY]=Шрыфты Name[bg]=Шрифтове Name[bg_BG]=Шрифтове Name[bs]=Fontovi Name[ca]=Tipus de lletra Name[ca@valencia]=Tipus de lletra Name[ca_ES]=Tipus de lletra Name[ca_ES@valencia]=Tipus de lletra Name[cs]=Písma Name[cs_CZ]=Písma Name[cy]=Ffontiau Name[da]=Skrifttyper Name[da_DK]=Skrifttyper Name[de]=Schriften Name[de_CH]=Schriften Name[de_DE]=Schriften Name[el]=Γραμματοσειρές Name[eo]=Tiparoj Name[es]=Tipos de letra Name[es_AR]=Tipos de letra Name[es_CL]=Tipos de letra Name[es_CO]=Tipos de letra Name[es_CR]=Tipos de letra Name[es_DO]=Tipos de letra Name[es_EC]=Tipos de letra Name[es_ES]=Tipos de letra Name[es_MX]=Tipos de letra Name[es_NI]=Tipos de letra Name[es_PA]=Tipos de letra Name[es_PE]=Tipos de letra Name[es_PR]=Tipos de letra Name[es_SV]=Tipos de letra Name[es_UY]=Tipos de letra Name[es_VE]=Tipos de letra Name[et]=Kirjatüübid Name[et_EE]=Kirjatüübid Name[eu]=Letra-tipoak Name[fa]=فونت‌ها Name[fa_AF]=فونت‌ها Name[fa_IR]=فونت‌ها Name[fi]=Fontit Name[fi_FI]=Fontit Name[fil]=Pagmumulan ng Name[fr]=Polices de caractères Name[fr_CA]=Polices de caractères Name[fr_FR]=Polices de caractères Name[ga]=Clófhoirne Name[gd]=Cruthan-clò Name[gl]=Tipos de letra Name[gl_ES]=Tipos de letra Name[hr]=Slova Name[hu]=Betűtípusok Name[hu_HU]=Betűtípusok Name[ia]=Typos de charactere Name[id]=Huruf Name[id_ID]=Huruf Name[is]=Letur Name[it]=Caratteri Name[it_CH]=Caratteri Name[it_IT]=Caratteri Name[ja]=フォント Name[ja_JP]=フォント Name[kab]=Tisefsayin Name[kk]=Қаріптер Name[ko]=글꼴 Name[ko_KR]=글꼴 Name[lo]=ຟອນ Name[lo_LA]=ຟອນ Name[lt]=Šriftai Name[lt_LT]=Šriftai Name[lv]=Fonti Name[lv_LV]=Fonti Name[ms]=Fon Name[ms_MY]=Fon Name[nb]=Skrifttyper Name[nb_NO]=Skrifttyper Name[nds]=Schriftarten Name[nl]=Lettertypen Name[nl_NL]=Lettertypen Name[oc]=Poliças Name[pa]=ਫੋਂਟ Name[pl]=Czcionki Name[pl_PL]=Czcionki Name[pt]=Tipo de letra Name[pt_BR]=Fontes Name[pt_PT]=Tipo de letra Name[ro]=Fonturi Name[ro_RO]=Fonturi Name[ru]=Шрифты Name[sk]=Písmo Name[sk_SK]=Písmo Name[sl]=Pisave Name[sl_SI]=Pisave Name[sq]=Shkronjat Name[sr]=Фонтови Name[sr@Latn]=Фонтови Name[sr@ije]=Фонтови Name[sr@ijekavianlatin]=Фонтови Name[sr@latin]=Фонтови Name[sr_RS]=Фонтови Name[sr_RS@latin]=Фонтови Name[sv]=Teckensnitt Name[ta]=எழுத்துருக்கள் Name[ta_LK]=எழுத்துருக்கள் Name[tg]=Шрифтҳо Name[th]=แบบอักษร Name[th_TH]=แบบอักษร Name[tr]=Yazı Tipleri Name[tr_TR]=Yazı Tipleri Name[uk]=Шрифти Name[uk_UA]=Шрифти Name[ur]=فونٹ Name[vi]=Phông chữ Name[vi_VN]=Phông chữ Name[zh_CN]=字体 Name[zh_HK]=字型 Name[zh_TW]=字型 Comment=Configure system fonts Comment[am]=የ ስርአቱን ፊደል ማሰናጃ Comment[ar]=إعداد خطوط النظام Comment[ast]=Configura les fontes del sistema Comment[be]=Наладзіць сістэмныя шрыфты Comment[be@latin]=Наладзіць сістэмныя шрыфты Comment[be_BY]=Наладзіць сістэмныя шрыфты Comment[bg]=Конфигуриране на системни шрифтове Comment[bg_BG]=Конфигуриране на системни шрифтове Comment[bs]=Konfigurišite sistemke fontove Comment[ca]=Administrar fonts del sistema Comment[ca@valencia]=Administra fonts del sistema Comment[ca_ES]=Administrar fonts del sistema Comment[ca_ES@valencia]=Administra fonts del sistema Comment[cs]=Nastavení systémových písem Comment[cs_CZ]=Nastavení systémových písem Comment[cy]=Ffurfweddwch ffontiau'r system Comment[da]=Konfigurér systemskrifttyper Comment[da_DK]=Konfigurér systemskrifttyper Comment[de]=Systemschriften konfigurieren Comment[de_CH]=Systemschriften konfigurieren Comment[de_DE]=Systemschriften konfigurieren Comment[el]=Ρύθμιση γραμματοσειράς συστήματος Comment[es]=Administrar fuentes del sistema Comment[es_AR]=Administrar fuentes del sistema Comment[es_CL]=Administrar fuentes del sistema Comment[es_CO]=Administrar fuentes del sistema Comment[es_CR]=Administrar fuentes del sistema Comment[es_DO]=Administrar fuentes del sistema Comment[es_EC]=Administrar fuentes del sistema Comment[es_ES]=Administrar fuentes del sistema Comment[es_MX]=Administrar fuentes del sistema Comment[es_NI]=Administrar fuentes del sistema Comment[es_PA]=Administrar fuentes del sistema Comment[es_PE]=Administrar fuentes del sistema Comment[es_PR]=Administrar fuentes del sistema Comment[es_SV]=Administrar fuentes del sistema Comment[es_UY]=Administrar fuentes del sistema Comment[es_VE]=Administrar fuentes del sistema Comment[eu]=Konfiguratu sistemaren letra-tipoak Comment[fa]=تنظیم فونت‌های سیستم Comment[fa_AF]=تنظیم فونت‌های سیستم Comment[fa_IR]=تنظیم فونت‌های سیستم Comment[fi]=Hallitse järjestelmän fontteja Comment[fi_FI]=Hallitse järjestelmän fontteja Comment[fr]=Configurer les polices du système Comment[fr_CA]=Configurer les polices du système Comment[fr_FR]=Configurer les polices du système Comment[gd]=Rèitich cruthan-clò an t-siostaim Comment[gl]=Configura os tipos de letra do sistema Comment[gl_ES]=Configura os tipos de letra do sistema Comment[hr]=Prilagodite slova sustava Comment[hu]=Rendszer betűtípusok beállítása Comment[hu_HU]=Rendszer betűtípusok beállítása Comment[ia]=Configurar le typos de character de systema Comment[id]=Pengaturan font Comment[id_ID]=Pengaturan font Comment[is]=Stilla kerfisletur Comment[it]=Configura il carattere di sistema Comment[it_CH]=Configura il carattere di sistema Comment[it_IT]=Configura il carattere di sistema Comment[ja]=システムフォントの管理 Comment[ja_JP]=システムフォントの管理 Comment[kab]=Seɣwer tisefsa n unagraw Comment[ko]=시스템 글꼴 설정 Comment[ko_KR]=시스템 글꼴 설정 Comment[lo]=ປັບແຕ່ງຟອນຂອງລະບົບ Comment[lo_LA]=ປັບແຕ່ງຟອນຂອງລະບົບ Comment[lt]=Nustatyti sistemos šriftus Comment[lt_LT]=Nustatyti sistemos šriftus Comment[lv]=Konfigurēt sistēmas fontus Comment[lv_LV]=Konfigurēt sistēmas fontus Comment[ms]=Konfigur sistem Font Comment[ms_MY]=Konfigur sistem Font Comment[nb]=Konfigurer systemskrifter Comment[nb_NO]=Konfigurer systemskrifter Comment[nds]=Systemschriftarten konfigurieren Comment[nl]=Systeemlettertypen instellen Comment[nl_NL]=Systeemlettertypen instellen Comment[pl]=Konfiguracja czcionek systemu Comment[pl_PL]=Konfiguracja czcionek systemu Comment[pt]=Configurar fontes do sistema Comment[pt_BR]=Configurar fontes do sistema Comment[pt_PT]=Configurar fontes do sistema Comment[ro]=Configurează fonturile sistemului Comment[ro_RO]=Configurează fonturile sistemului Comment[ru]=Настроить системные шрифты Comment[sk]=Nastaviť systémové písma Comment[sk_SK]=Nastaviť systémové písma Comment[sl]=Nastavljajte sistemske pisave Comment[sl_SI]=Nastavljajte sistemske pisave Comment[sq]=Konfiguro shkronjat e sistemit Comment[sr]=Подешавање слова система Comment[sr@Latn]=Подешавање слова система Comment[sr@ije]=Подешавање слова система Comment[sr@ijekavianlatin]=Подешавање слова система Comment[sr@latin]=Подешавање слова система Comment[sr_RS]=Подешавање слова система Comment[sr_RS@latin]=Подешавање слова система Comment[sv]=Konfigurera systemets teckensnitt Comment[tg]=Танзимоти шрифтҳои системавӣ Comment[th]=กำหนดแบบอักษรของระบบ Comment[th_TH]=กำหนดแบบอักษรของระบบ Comment[tr]=Sistem yazı tiplerini yapılandır Comment[tr_TR]=Sistem yazı tiplerini yapılandır Comment[uk]=Налаштування системних шрифтів Comment[uk_UA]=Налаштування системних шрифтів Comment[ur]=نظام کے فونٹ کو تشکیل دیں Comment[vi]=Cấu hình kiểu chữ hệ thống Comment[vi_VN]=Cấu hình kiểu chữ hệ thống Comment[zh_CN]=配置系统字体 Comment[zh_HK]=設定系統字型組態 Comment[zh_TW]=設定系統字型組態 Keywords=font;size;small;large; Keywords[am]=ፊደል መጠን ትንሽ ትልቅ; Keywords[ar]=الخط، الحجم، صغير، عريض; Keywords[ast]=fonte;tamañu;pequeñu;grande;lletra;lletres;fontes; Keywords[be]=шрыфт;памер;маленькі;вялікі; Keywords[be@latin]=шрыфт;памер;маленькі;вялікі; Keywords[be_BY]=шрыфт;памер;маленькі;вялікі; Keywords[bg]=шрифт;размер;малък;голям; Keywords[bg_BG]=шрифт;размер;малък;голям; Keywords[bs]=font;veličina;malo;veliko; Keywords[ca]=font;mida;petit;gran; Keywords[ca@valencia]=font;grandària;xicotet;gran; Keywords[ca_ES]=font;mida;petit;gran; Keywords[ca_ES@valencia]=font;grandària;xicotet;gran; Keywords[cs]=font;velikost;malý;velký; Keywords[cs_CZ]=font;velikost;malý;velký; Keywords[cy]=ffont;maint;bach;mawr; Keywords[da]=skrifttype;størrelse;lille;stor; Keywords[da_DK]=skrifttype;størrelse;lille;stor; Keywords[de]=Schriftart;Font;Größe;Klein;Groß; Keywords[de_CH]=Schriftart;Font;Größe;Klein;Groß; Keywords[de_DE]=Schriftart;Font;Größe;Klein;Groß; Keywords[el]=γραμματοσειρά;μέγεθος;μικρά;μεγάλα; Keywords[es]=fuente;tamaño;pequeño;grande; Keywords[es_AR]=fuente;tamaño;pequeño;grande; Keywords[es_CL]=fuente;tamaño;pequeño;grande; Keywords[es_CO]=fuente;tamaño;pequeño;grande; Keywords[es_CR]=fuente;tamaño;pequeño;grande; Keywords[es_DO]=fuente;tamaño;pequeño;grande; Keywords[es_EC]=fuente;tamaño;pequeño;grande; Keywords[es_ES]=fuente;tamaño;pequeño;grande; Keywords[es_MX]=fuente;tamaño;pequeño;grande; Keywords[es_NI]=fuente;tamaño;pequeño;grande; Keywords[es_PA]=fuente;tamaño;pequeño;grande; Keywords[es_PE]=fuente;tamaño;pequeño;grande; Keywords[es_PR]=fuente;tamaño;pequeño;grande; Keywords[es_SV]=fuente;tamaño;pequeño;grande; Keywords[es_UY]=fuente;tamaño;pequeño;grande; Keywords[es_VE]=fuente;tamaño;pequeño;grande; Keywords[et]=font;suurus;väike;suur; Keywords[et_EE]=font;suurus;väike;suur; Keywords[eu]=letra-tipoa;tamaina;txikia;handia; Keywords[fa]=فونت، اندازه، کوچک، بزرگ; Keywords[fa_AF]=فونت، اندازه، کوچک، بزرگ; Keywords[fa_IR]=فونت، اندازه، کوچک، بزرگ; Keywords[fi]=fontti;koko;pieni;iso; Keywords[fi_FI]=fontti;koko;pieni;iso; Keywords[fr]=police;taille;petit;grand; Keywords[fr_CA]=police;taille;petit;grand; Keywords[fr_FR]=police;taille;petit;grand; Keywords[ga]=clófhoireann;méid;beag;mór; Keywords[gd]=cruth-clò;meud;beag;mòr;font;size;small;large; Keywords[gl]=tipo de letra;tamaño;pequena;grande; Keywords[gl_ES]=tipo de letra;tamaño;pequena;grande; Keywords[hr]=slovo;veličina;malo;veliko; Keywords[hu]=betűtípus;méret;kicsi;nagy; Keywords[hu_HU]=betűtípus;méret;kicsi;nagy; Keywords[ia]=typo de characteres;dimension;parve;grande; Keywords[id]=huruf;ukuran;kecil;besar; Keywords[id_ID]=huruf;ukuran;kecil;besar; Keywords[is]=letur;stærð;lítið;stórt; Keywords[it]=carattere;dimensione;piccolo;grande; Keywords[it_CH]=carattere;dimensione;piccolo;grande; Keywords[it_IT]=carattere;dimensione;piccolo;grande; Keywords[ja]=フォント、サイズ、小さく、大きく; Keywords[ja_JP]=フォント、サイズ、小さく、大きく; Keywords[kab]=Tasefsit;tiddi;tamecṭuḥt;tahrawnant; Keywords[ko]=글꼴;크기;작게;크게; Keywords[ko_KR]=글꼴;크기;작게;크게; Keywords[lo]=ຟອນ;ຂະໜາດ;ນ້ອຍ;ໃຫຍ່; Keywords[lo_LA]=ຟອນ;ຂະໜາດ;ນ້ອຍ;ໃຫຍ່; Keywords[lt]=šriftas;dydis;didelis;mažas; Keywords[lt_LT]=šriftas;dydis;didelis;mažas; Keywords[lv]=fonts;izmērs;mazi;lieli; Keywords[lv_LV]=fonts;izmērs;mazi;lieli; Keywords[ms]=fon;saiz;kecil;besar; Keywords[ms_MY]=fon;saiz;kecil;besar; Keywords[nb]=skrifttype;størrelse;liten;stor; Keywords[nb_NO]=skrifttype;størrelse;liten;stor; Keywords[nds]=Schriftart;Größe;klein;groß; Keywords[nl]=lettertype;grootte;klein;groot; Keywords[nl_NL]=lettertype;grootte;klein;groot; Keywords[pl]=czcionka;wielkość;mała;duża; Keywords[pl_PL]=czcionka;wielkość;mała;duża; Keywords[pt]=letra;tamanho;grande;pequena; Keywords[pt_BR]=fonte;tamanho;pequena;grande; Keywords[pt_PT]=letra;tamanho;grande;pequena; Keywords[ro]=font;dimensiune;mic;mare; Keywords[ro_RO]=font;dimensiune;mic;mare; Keywords[ru]=шрифт;размер;маленький;большой; Keywords[sk]=písmo;veľkosť;malé;veľké; Keywords[sk_SK]=písmo;veľkosť;malé;veľké; Keywords[sl]=pisava;velikost;majhna;velika; Keywords[sl_SI]=pisava;velikost;majhna;velika; Keywords[sq]=shkronjat;madhësia;i vogël;i madh; Keywords[sr]=писмо;слова;фонт;величина;мало;велико; Keywords[sr@Latn]=писмо;слова;фонт;величина;мало;велико; Keywords[sr@ije]=писмо;слова;фонт;величина;мало;велико; Keywords[sr@ijekavianlatin]=писмо;слова;фонт;величина;мало;велико; Keywords[sr@latin]=писмо;слова;фонт;величина;мало;велико; Keywords[sr_RS]=писмо;слова;фонт;величина;мало;велико; Keywords[sr_RS@latin]=писмо;слова;фонт;величина;мало;велико; Keywords[sv]=teckensnitt;storlek;små;stort; Keywords[ta]=எழுத்துரு;அளவு;சிறிய;பெரிய; Keywords[ta_LK]=எழுத்துரு;அளவு;சிறிய;பெரிய; Keywords[tg]=шрифт;андоза;хурд;калон; Keywords[th]=แบบอักษร;ขนาด;เล็ก;ใหญ่; Keywords[th_TH]=แบบอักษร;ขนาด;เล็ก;ใหญ่; Keywords[tr]=font;boyut;küçük;büyük; Keywords[tr_TR]=font;boyut;küçük;büyük; Keywords[uk]=шрифт;розмір;маленький;великий; Keywords[uk_UA]=шрифт;розмір;маленький;великий; Keywords[ur]=فونٹ، سائز، چھوٹا، بڑا; Keywords[vi]=phông;cỡ;nhỏ;to; Keywords[vi_VN]=phông;cỡ;nhỏ;to; Keywords[zh_CN]=font;size;small;large;字体;字号;大小;放大;缩小; Keywords[zh_HK]=font;size;small;large;字型;大小;小;大; Keywords[zh_TW]=字型;尺寸;小;大; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-tiling.desktop0000664000175000017500000004334513215735076026261 0ustar fabiofabio[Desktop Entry] Icon=cs-tiling Exec=cinnamon-settings tiling Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Window Tiling Name[am]=መስኮት መከመሪያ Name[bg]=Показвай придвижването Name[bg_BG]=Показвай придвижването Name[ca]=Ajust de finestres Name[ca@valencia]=Ajust de finestres Name[ca_ES]=Ajust de finestres Name[ca_ES@valencia]=Ajust de finestres Name[cs]=Dláždění oken Name[cs_CZ]=Dláždění oken Name[cy]=Teilsio Ffenestri Name[da]=Side om side-udlægning Name[da_DK]=Side om side-udlægning Name[de]=Fensterkacheln Name[de_CH]=Fensterkacheln Name[de_DE]=Fensterkacheln Name[el]=Πλακίδια Παραθύρων Name[es]=Ajuste de ventanas Name[es_AR]=Ajuste de ventanas Name[es_CL]=Ajuste de ventanas Name[es_CO]=Ajuste de ventanas Name[es_CR]=Ajuste de ventanas Name[es_DO]=Ajuste de ventanas Name[es_EC]=Ajuste de ventanas Name[es_ES]=Ajuste de ventanas Name[es_MX]=Ajuste de ventanas Name[es_NI]=Ajuste de ventanas Name[es_PA]=Ajuste de ventanas Name[es_PE]=Ajuste de ventanas Name[es_PR]=Ajuste de ventanas Name[es_SV]=Ajuste de ventanas Name[es_UY]=Ajuste de ventanas Name[es_VE]=Ajuste de ventanas Name[eu]=Leihoa lauzatzea Name[fi]=Ikkunoiden ruudutus Name[fi_FI]=Ikkunoiden ruudutus Name[fr]=Juxtaposition de fenêtres Name[fr_CA]=Alignement de fenêtres Name[fr_FR]=Juxtaposition de fenêtres Name[gd]=Leacadh nan uinneagan Name[gl]=Xanelas en mosaico Name[gl_ES]=Xanelas en mosaico Name[hr]=Slaganje prozora Name[hu]=Ablak mozaik Name[hu_HU]=Ablak mozaik Name[ia]=Quadrellatura de fenestra Name[is]=Flísalagning glugga Name[it]=Affiancamento finestre Name[it_CH]=Affiancamento finestre Name[it_IT]=Affiancamento finestre Name[ja]=ウインドウタイル表示 Name[ja_JP]=ウインドウタイル表示 Name[ko]=창 타일링 Name[ko_KR]=창 타일링 Name[lt]=Langų išdėliojimas Name[lt_LT]=Langų išdėliojimas Name[nb]=Vindusorganisering Name[nb_NO]=Vindusorganisering Name[nds]=Fensterkacheln Name[nl]=Tegelen van vensters Name[nl_NL]=Tegelen van vensters Name[oc]=Juxtaposicion de fenèstras Name[pl]=Ułożenie Okna Name[pl_PL]=Ułożenie Okna Name[pt]=Arrumação de Janelas Name[pt_BR]=Janelas em Mosaico Name[pt_PT]=Arrumação de Janelas Name[ro]=Tiling fereastră Name[ro_RO]=Tiling fereastră Name[ru]=Оконная кладка Name[sk]=Dláždenie okien Name[sk_SK]=Dláždenie okien Name[sr]=Поплочавање прозора Name[sr@Latn]=Поплочавање прозора Name[sr@ije]=Поплочавање прозора Name[sr@ijekavianlatin]=Поплочавање прозора Name[sr@latin]=Поплочавање прозора Name[sr_RS]=Поплочавање прозора Name[sr_RS@latin]=Поплочавање прозора Name[sv]=Ordna Fönster Name[th]=การจัดวางหน้าต่าง Name[th_TH]=การจัดวางหน้าต่าง Name[tr]=Pencere Döşeme Name[tr_TR]=Pencere Döşeme Name[uk]=Віконна кладка Name[uk_UA]=Віконна кладка Name[ur]=ونڈو ٹائلنگ Name[vi]=Lát Cửa sổ Name[vi_VN]=Lát Cửa sổ Name[zh_CN]=窗口平铺 Name[zh_HK]=視窗平舖 Name[zh_TW]=視窗平舖 Comment=Manage window tiling preferences Comment[am]=የ መስኮት መደርደሪያ ምርጫዎች አስተዳዳሪ Comment[be]=Кіраванне параметрамі мазаічнага размяшчэння вокнаў Comment[be@latin]=Кіраванне параметрамі мазаічнага размяшчэння вокнаў Comment[be_BY]=Кіраванне параметрамі мазаічнага размяшчэння вокнаў Comment[bg]=Управление подредбата на прозорците Comment[bg_BG]=Управление подредбата на прозорците Comment[bs]=Upravljaj postavkama pločastog prikaza prozora Comment[ca]=Gestioneu les preferències de mosaic de finestres Comment[ca@valencia]=Administra les preferències de mosaic de finestres Comment[ca_ES]=Gestioneu les preferències de mosaic de finestres Comment[ca_ES@valencia]=Administra les preferències de mosaic de finestres Comment[cs]=Nastavení dláždění oken Comment[cs_CZ]=Nastavení dláždění oken Comment[cy]=Rheoli dewisiadau teilsio ffenestri Comment[da]=Administrér indstillinger for side om side-udlægning Comment[da_DK]=Administrér indstillinger for side om side-udlægning Comment[de]=Kacheleinstellungen der Fenster verwalten Comment[de_CH]=Kacheleinstellungen der Fenster verwalten Comment[de_DE]=Kacheleinstellungen der Fenster verwalten Comment[el]=Διαχείριση προτιμήσεων τοποθέτησης παραθύρων ως πλακίδια Comment[es]=Administrar las preferencias de ajuste de ventanas Comment[es_AR]=Administrar las preferencias de ajuste de ventanas Comment[es_CL]=Administrar las preferencias de ajuste de ventanas Comment[es_CO]=Administrar las preferencias de ajuste de ventanas Comment[es_CR]=Administrar las preferencias de ajuste de ventanas Comment[es_DO]=Administrar las preferencias de ajuste de ventanas Comment[es_EC]=Administrar las preferencias de ajuste de ventanas Comment[es_ES]=Administrar las preferencias de ajuste de ventanas Comment[es_MX]=Administrar las preferencias de ajuste de ventanas Comment[es_NI]=Administrar las preferencias de ajuste de ventanas Comment[es_PA]=Administrar las preferencias de ajuste de ventanas Comment[es_PE]=Administrar las preferencias de ajuste de ventanas Comment[es_PR]=Administrar las preferencias de ajuste de ventanas Comment[es_SV]=Administrar las preferencias de ajuste de ventanas Comment[es_UY]=Administrar las preferencias de ajuste de ventanas Comment[es_VE]=Administrar las preferencias de ajuste de ventanas Comment[eu]=Kudeatu leihoak lauzatzeko hobespenak Comment[fi]=Muokkaa ikkunoiden ruudutuksen asetuksia Comment[fi_FI]=Muokkaa ikkunoiden ruudutuksen asetuksia Comment[fr]=Gérer les préférences de juxtaposition des fenêtres Comment[fr_CA]=Gérer les préférences de juxtaposition des fenêtres Comment[fr_FR]=Gérer les préférences de juxtaposition des fenêtres Comment[gd]=Stiùirich roghainnean leacadh nan uinneagan Comment[gl]=Administra as preferencias do mosaixo de xanelas Comment[gl_ES]=Administra as preferencias do mosaixo de xanelas Comment[hr]=Upravljajte osobitostima slaganja prozora Comment[hu]=Ablak mozaik beállítások kezelése Comment[hu_HU]=Ablak mozaik beállítások kezelése Comment[ia]=Gerer le preferentias del pavimentation del fenestra Comment[id]=Atur preferensi pengubinan jendela Comment[id_ID]=Atur preferensi pengubinan jendela Comment[is]=Sýsla með kjörstillingar fyrir uppröðun glugga Comment[it]=Gestisci le preferenze di affiancamento delle finestre Comment[it_CH]=Gestisci le preferenze di affiancamento delle finestre Comment[it_IT]=Gestisci le preferenze di affiancamento delle finestre Comment[ko]=창 타일링 설정 관리하기 Comment[ko_KR]=창 타일링 설정 관리하기 Comment[lt]=Tvarkyti langų išdėliojimo nuostatas Comment[lt_LT]=Tvarkyti langų išdėliojimo nuostatas Comment[ms]=Mengurus pilihan jubin tetingkap Comment[ms_MY]=Mengurus pilihan jubin tetingkap Comment[nb]=Håndter innstillinger for vindusorganisering Comment[nb_NO]=Håndter innstillinger for vindusorganisering Comment[nds]=Fensteranordnungseinstellungen verwalten Comment[nl]=Voorkeuren beheren voor het tegelen van vensters Comment[nl_NL]=Voorkeuren beheren voor het tegelen van vensters Comment[pl]=Zarządzaj preferencjami kafelkowania okien Comment[pl_PL]=Zarządzaj preferencjami kafelkowania okien Comment[pt]=Gerir as definições de arrumação de janelas Comment[pt_BR]=Gerenciar as definições de mosaico de janelas Comment[pt_PT]=Gerir as definições de arrumação de janelas Comment[ro]=Gestionează preferințele pentru tilingul ferestrelor Comment[ro_RO]=Gestionează preferințele pentru tilingul ferestrelor Comment[ru]=Управление параметрами мозаичного размещения окон Comment[sk]=Spravovať predvoľby dláždenia okien Comment[sk_SK]=Spravovať predvoľby dláždenia okien Comment[sl]=Upravljajte z možnostmi razpostavljanja oken Comment[sl_SI]=Upravljajte z možnostmi razpostavljanja oken Comment[sr]=Управљање поставкама слагања прозора Comment[sr@Latn]=Управљање поставкама слагања прозора Comment[sr@ije]=Управљање поставкама слагања прозора Comment[sr@ijekavianlatin]=Управљање поставкама слагања прозора Comment[sr@latin]=Управљање поставкама слагања прозора Comment[sr_RS]=Управљање поставкама слагања прозора Comment[sr_RS@latin]=Управљање поставкама слагања прозора Comment[sv]=Hantera inställningar för radning av fönster Comment[tg]=Идоракунии хусусиятҳои лавҳабандии равзанаҳо Comment[th]=จัดการการตั้งค่าการจัดหน้าต่างแบบกระเบื้องขั้นสูง Comment[th_TH]=จัดการการตั้งค่าการจัดหน้าต่างแบบกระเบื้องขั้นสูง Comment[tr]=Pencere döşeme seçeneklerini yönet Comment[tr_TR]=Pencere döşeme seçeneklerini yönet Comment[uk]=Керування прилипанням вікон Comment[uk_UA]=Керування прилипанням вікон Comment[ur]=ونڈو ٹائلنگ کی ترجیحات کا انتظام کریں Comment[vi]=Quản lý tuỳ thích lát cửa sổ Comment[vi_VN]=Quản lý tuỳ thích lát cửa sổ Comment[zh_CN]=管理窗口平铺样式 Comment[zh_HK]=管理視窗平舖喜好設定 Comment[zh_TW]=管理視窗平舖偏好設定 Keywords=window;tile;flip;tiling;snap;snapping; Keywords[am]=መስኮት፡ መደርደሪያ ፡ መገልበጫ፡ መደርደሪያዎች፡ መቁረጫ፡ መቁረጫዎች; Keywords[be]=акно;пазіцыя;прыцягненне;прымацаванне;абароненая пазіцыя;абароненае прымацаванне; Keywords[be@latin]=акно;пазіцыя;прыцягненне;прымацаванне;абароненая пазіцыя;абароненае прымацаванне; Keywords[be_BY]=акно;пазіцыя;прыцягненне;прымацаванне;абароненая пазіцыя;абароненае прымацаванне; Keywords[bg]=прозорец;подреждане;обръщане;прилепване; Keywords[bg_BG]=прозорец;подреждане;обръщане;прилепване; Keywords[bs]=prozor;složi;pomakni;slaganje;poravnaj;poravnanje; Keywords[ca]=finestra;rajola;voltejat;mosaic;ajustar;ajustament; Keywords[ca@valencia]=finestra;taulell;voltejat;mosaic;ajustar;ajust; Keywords[ca_ES]=finestra;rajola;voltejat;mosaic;ajustar;ajustament; Keywords[ca_ES@valencia]=finestra;taulell;voltejat;mosaic;ajustar;ajust; Keywords[cs]=okno;dlaždice;přetočení;dláždění;přichytit;přichycení; Keywords[cs_CZ]=okno;dlaždice;přetočení;dláždění;přichytit;přichycení; Keywords[cy]=ffenestr;teil;ffeil;teilsio;snap;snapio; Keywords[da]=vindue;flise;vend;side om side;fastgør;fastgørelse; Keywords[da_DK]=vindue;flise;vend;side om side;fastgør;fastgørelse; Keywords[de]=Fenster;Kacheln;Umschalten;Kacheln;Einrasten;Einrasten; Keywords[de_CH]=Fenster;Kacheln;Umschalten;Kacheln;Einrasten;Einrasten; Keywords[de_DE]=Fenster;Kacheln;Umschalten;Kacheln;Einrasten;Einrasten; Keywords[el]=παράθυρο;πλακίδιο;αναστροφή;τοποθέτηση ως πλακίδια;λαβή;συγκράτηση; Keywords[es]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_AR]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_CL]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_CO]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_CR]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_DO]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_EC]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_ES]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_MX]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_NI]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_PA]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_PE]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_PR]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_SV]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_UY]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[es_VE]=ventana;ajuste;volteado;ajustar;anclado;anclar; Keywords[eu]=leihoa;lauza;irauli;lauzatzea;atxiki;atxikitzea; Keywords[fi]=ikkuna;ruutu;käännös;ruudutus;napsauttaa;napsautus; Keywords[fi_FI]=ikkuna;ruutu;käännös;ruudutus;napsauttaa;napsautus; Keywords[fr]=fenêtre;juxtaposition;basculer;ajuster;ajustement; Keywords[fr_CA]=fenêtre;juxtaposition;basculer;aligner;alignement; Keywords[fr_FR]=fenêtre;juxtaposition;basculer;ajuster;ajustement; Keywords[gd]=uinneag;leac;flipeadh;flip;leacadh;greimich;greimeachadh;window;tile;flip;tiling;snap;snapping; Keywords[gl]=xanela;baldosa;volteado;mosaico;axustar;axuste; Keywords[gl_ES]=xanela;baldosa;volteado;mosaico;axustar;axuste; Keywords[hr]=prozor;složi;pomakni;slaganje;poravnaj;poravnanje; Keywords[hu]=ablak;mozaik;forgatás;mozaikba rendezés;igazított;igazítás; Keywords[hu_HU]=ablak;mozaik;forgatás;mozaikba rendezés;igazított;igazítás; Keywords[ia]=fenestra;quadrello;colpar legiermente;quadrellatura;fixar;fixation; Keywords[id]=jendela;mode ubin;balik;mengubin;jepit;menjepit; Keywords[id_ID]=jendela;mode ubin;balik;mengubin;jepit;menjepit; Keywords[is]=gluggi;flísar;fletta;flísaleggja;grip;grípa; Keywords[it]=finestra;affianca;vibra;disponi;aggancia;agganciamento; Keywords[it_CH]=finestra;affianca;vibra;disponi;aggancia;agganciamento; Keywords[it_IT]=finestra;affianca;vibra;disponi;aggancia;agganciamento; Keywords[ja]=ウィンドウ、タイル、フリップ、タイル表示、スナップ、スナップ化; Keywords[ja_JP]=ウィンドウ、タイル、フリップ、タイル表示、スナップ、スナップ化; Keywords[ko]=창;타일;뒤집기;타일링;스냅;스내핑; Keywords[ko_KR]=창;타일;뒤집기;타일링;스냅;스내핑; Keywords[ms]=tetingkap;jubin;kalij;penjubinan;lekap;pelekapan; Keywords[ms_MY]=tetingkap;jubin;kalij;penjubinan;lekap;pelekapan; Keywords[nb]=vindu;flis;snu;flislegging;fest;feste; Keywords[nb_NO]=vindu;flis;snu;flislegging;fest;feste; Keywords[nds]=Fenster;Kachel;schnipp;knicken;abgeknickt; Keywords[nl]=venster;tegelen;omdraaien;tegelen;uitlijnen; Keywords[nl_NL]=venster;tegelen;omdraaien;tegelen;uitlijnen; Keywords[om]=Foddaa;dalga tuula;fuggisa;dalga tuuluu;xaaxxuu;xaxxise; Keywords[pl]=okno;płytka;odwracanie;kafelkowanie;przystawka;przyciąganie; Keywords[pl_PL]=okno;płytka;odwracanie;kafelkowanie;przystawka;przyciąganie; Keywords[pt]=janela;mosaico;inversão;ajuste;magnetismo;ajustar; Keywords[pt_BR]=janela;mosaico;flip;ativar mosaico;encaixar;ativar encaixe; Keywords[pt_PT]=janela;mosaico;inversão;ajuste;magnetismo;ajustar; Keywords[ro]=fereastră;tile;întoarce;tiling;snap;snapping; Keywords[ro_RO]=fereastră;tile;întoarce;tiling;snap;snapping; Keywords[ru]=окно;позиция;притяжение;прикрепление;защищенная позиция;защищенное прикрепление; Keywords[sk]=okno;dlaždice;pretočenie;dláždenie;prichytiť;prichytenie; Keywords[sk_SK]=okno;dlaždice;pretočenie;dláždenie;prichytiť;prichytenie; Keywords[sl]=okno;ploščica;zrcali;razpostavljanje;pripni;pripenjanje; Keywords[sl_SI]=okno;ploščica;zrcali;razpostavljanje;pripni;pripenjanje; Keywords[sr]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr@Latn]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr@ije]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr@ijekavianlatin]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr@latin]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr_RS]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sr_RS@latin]=прозор;сложи;преокрени;слагање;хватање;поравнање; Keywords[sv]=fönster;rada;vänd;radning;fästa;fästning; Keywords[tg]=равзана;лавҳа;табдил;лавҳабандӣ;часпонидан;часпиш; Keywords[th]=หน้าต่าง;กระเบื้อง;พลิก;การจัดกระเบื้อง;สแนป;การสแนป; Keywords[th_TH]=หน้าต่าง;กระเบื้อง;พลิก;การจัดกระเบื้อง;สแนป;การสแนป; Keywords[tr]=pencere;döşe;çevirme;döşeme;yasla;yaslama; Keywords[tr_TR]=pencere;döşe;çevirme;döşeme;yasla;yaslama; Keywords[uk]=вікно;позиція;притягування;прикріплення;захищена позиція;захищене прикріплення; Keywords[uk_UA]=вікно;позиція;притягування;прикріплення;захищена позиція;захищене прикріплення; Keywords[ur]=ونڈو، عنوان، ٹائٹل، فلپ، ٹائلنگ، سنیپ; Keywords[vi]=cửa sổ;ô;lật;lát;bám;bám dính; Keywords[vi_VN]=cửa sổ;ô;lật;lát;bám;bám dính; Keywords[zh_CN]=window;tile;flip;tiling;snap;snapping;窗口;平铺;吸附; Keywords[zh_HK]=視窗;平舖;翻轉;平舖;吸附;吸附; Keywords[zh_TW]=視窗;平舖;翻躍;平舖;吸附;吸附; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-themes.desktop0000664000175000017500000003665313215735076026264 0ustar fabiofabio[Desktop Entry] Icon=cs-themes Exec=cinnamon-settings themes Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Themes Name[af]=Temas Name[am]=ገፅታዎች Name[ar]=السِمات Name[ast]=Temes Name[az]=Mövzular Name[az_AZ]=Mövzular Name[be]=Тэмы Name[be@latin]=Тэмы Name[be_BY]=Тэмы Name[bg]=Теми Name[bg_BG]=Теми Name[bn]=থিমসমূহ Name[bn_IN]=থিমসমূহ Name[bs]=Teme Name[ca]=Temes Name[ca@valencia]=Temes Name[ca_ES]=Temes Name[ca_ES@valencia]=Temes Name[crh]=temalar Name[cs]=Motivy Name[cs_CZ]=Motivy Name[csb]=Mòtiwë Name[cy]=Themâu Name[da]=Temaer Name[da_DK]=Temaer Name[de]=Themen Name[de_CH]=Themen Name[de_DE]=Themen Name[el]=Θέματα Name[eo]=Etosoj Name[es]=Temas Name[es_AR]=Temas Name[es_CL]=Temas Name[es_CO]=Temas Name[es_CR]=Temas Name[es_DO]=Temas Name[es_EC]=Temas Name[es_ES]=Temas Name[es_MX]=Temas Name[es_NI]=Temas Name[es_PA]=Temas Name[es_PE]=Temas Name[es_PR]=Temas Name[es_SV]=Temas Name[es_UY]=Temas Name[es_VE]=Temas Name[et]=Teemad Name[et_EE]=Teemad Name[eu]=Gaiak Name[fa]=قالب‌ها Name[fa_AF]=قالب‌ها Name[fa_IR]=قالب‌ها Name[fi]=Teemat Name[fi_FI]=Teemat Name[fil]=Mga Tema Name[fr]=Thèmes Name[fr_CA]=Thèmes Name[fr_FR]=Thèmes Name[fy]=Tema's Name[ga]=Téamaí Name[gd]=Ùrlaran Name[gl]=Temas Name[gl_ES]=Temas Name[he]=ערכות Name[he_IL]=ערכות Name[hi]=थीम्स Name[hr]=Teme Name[hu]=Témák Name[hu_HU]=Témák Name[hy]=Թեմաներ Name[ia]=Themas Name[id]=Tema Name[id_ID]=Tema Name[is]=Þemu Name[it]=Temi Name[it_CH]=Temi Name[it_IT]=Temi Name[ja]=テーマ Name[ja_JP]=テーマ Name[kab]=Isental Name[kk]=Нақыштар Name[km]=ស្បែក Name[km_KH]=ស្បែក Name[ko]=테마 Name[ko_KR]=테마 Name[li]=Thema's Name[lo]=ລັກສະນະ Name[lo_LA]=ລັກສະນະ Name[lt]=Stiliai Name[lt_LT]=Stiliai Name[lv]=Motīvi Name[lv_LV]=Motīvi Name[ml]=രംഗവിധാനങ്ങൾ Name[mr]=थीम्स Name[ms]=Tema Name[ms_MY]=Tema Name[nb]=Temaer Name[nb_NO]=Temaer Name[nds]=Themen Name[ne]=थेमहरु Name[nl]=Thema's Name[nl_NL]=Thema's Name[nn]=Drakter Name[nn_NO]=Drakter Name[oc]=Tèmas Name[om]=Bifoota Name[pa]=ਥੀਮ Name[pl]=Motywy Name[pl_PL]=Motywy Name[pt]=Temas Name[pt_BR]=Temas Name[pt_PT]=Temas Name[ro]=Teme Name[ro_RO]=Teme Name[ru]=Темы Name[rue]=Теми Name[sc]=Temas Name[si]=තේමාවන් Name[sk]=Motívy Name[sk_SK]=Motívy Name[sl]=Teme Name[sl_SI]=Teme Name[so]=Siimyadda Name[sq]=Temat Name[sr]=Теме Name[sr@Latn]=Teme Name[sr@ije]=Теме Name[sr@ijekavianlatin]=Теме Name[sr@latin]=Teme Name[sr_RS]=Теме Name[sr_RS@latin]=Teme Name[sv]=Teman Name[ta]=தள வடிவங்கள் Name[ta_LK]=தள வடிவங்கள் Name[te]=అలంకారాలు Name[tg]=Мавзӯҳо Name[th]=ชุดตกแต่ง Name[th_TH]=ชุดตกแต่ง Name[tl]=Mga Tema Name[tr]=Temalar Name[tr_TR]=Temalar Name[ts]=Nkongomelo Name[tt]=Темы Name[tt@iqtelif]=Темы Name[uk]=Теми Name[uk_UA]=Теми Name[ur]=تھیمز Name[uz]=Ташқи кўринишлар Name[uz@cyrillic]=Ташқи кўринишлар Name[vi]=Giao diện Name[vi_VN]=Giao diện Name[xh]=Umxholo Name[zh_CN]=主题 Name[zh_HK]=佈景主題 Name[zh_TW]=佈景主題 Comment=Manage themes to change how your desktop looks Comment[am]=የ እርስዎ ዴስክቶፕ ገጽታ ምን እንደሚመስል መቆጣጠሪያ Comment[ar]=إدارة السمات اتغيير مظهر سطح المكتب Comment[ast]=Alministra los temes y camuda l'aspeutu del to escritoriu Comment[be]=Кіраванне тэмамі знешняга выгляду працоўнага стала Comment[be@latin]=Кіраванне тэмамі знешняга выгляду працоўнага стала Comment[be_BY]=Кіраванне тэмамі знешняга выгляду працоўнага стала Comment[bg]=Управлявайте темите, за да промените вида на вашия работен плот Comment[bg_BG]=Управлявайте темите, за да промените вида на вашия работен плот Comment[bs]=Upravljaj temama da promijenite kako vaš desktop izgleda Comment[ca]=Gestioneu els temes per canviar l'aparença del vostre escriptori Comment[ca@valencia]=Administra els temes per a canviar l'aspecte de l'escriptori Comment[ca_ES]=Gestioneu els temes per canviar l'aparença del vostre escriptori Comment[ca_ES@valencia]=Administra els temes per a canviar l'aspecte de l'escriptori Comment[cs]=Nastavení témat, která mění vzhled vašeho prostředí Comment[cs_CZ]=Nastavení témat, která mění vzhled vašeho prostředí Comment[cy]=Rheoli themâu er mwyn newid sut olwg sydd ar eich sgrin Comment[da]=Administrér temaer for at ændre, hvordan dit skrivebord ser ud Comment[da_DK]=Administrér temaer for at ændre, hvordan dit skrivebord ser ud Comment[de]=Themen verwalten, um das Aussehen des Schreibtischs zu verändern Comment[de_CH]=Themen verwalten, um das Aussehen des Schreibtischs zu verändern Comment[de_DE]=Themen verwalten, um das Aussehen des Schreibtischs zu verändern Comment[el]=Ρυθμίστε τα θέματα και αλλάξτε την εμφάνιση του υπολογιστή Comment[es]=Administrar temas para cambiar el aspecto del escritorio Comment[es_AR]=Administrar temas para cambiar el aspecto del escritorio Comment[es_CL]=Administrar temas para cambiar el aspecto del escritorio Comment[es_CO]=Administrar temas para cambiar el aspecto del escritorio Comment[es_CR]=Administrar temas para cambiar el aspecto del escritorio Comment[es_DO]=Administrar temas para cambiar el aspecto del escritorio Comment[es_EC]=Administrar temas para cambiar el aspecto del escritorio Comment[es_ES]=Administrar temas para cambiar el aspecto del escritorio Comment[es_MX]=Administrar temas para cambiar el aspecto del escritorio Comment[es_NI]=Administrar temas para cambiar el aspecto del escritorio Comment[es_PA]=Administrar temas para cambiar el aspecto del escritorio Comment[es_PE]=Administrar temas para cambiar el aspecto del escritorio Comment[es_PR]=Administrar temas para cambiar el aspecto del escritorio Comment[es_SV]=Administrar temas para cambiar el aspecto del escritorio Comment[es_UY]=Administrar temas para cambiar el aspecto del escritorio Comment[es_VE]=Administrar temas para cambiar el aspecto del escritorio Comment[eu]=Kudeatu gaiak zure mahaigainaren itxura aldatzeko Comment[fi]=Muuta työpöydän ulkonäköä teemojen avulla Comment[fi_FI]=Muuta työpöydän ulkonäköä teemojen avulla Comment[fr]=Gérer les thèmes pour changer l'apparence du bureau Comment[fr_CA]=Gérer les thèmes pour changer l'apparence de votre bureau Comment[fr_FR]=Gérer les thèmes pour changer l'apparence du bureau Comment[gd]=Stiùirich ùrlaran gus an coltas a tha air an deasg agad atharrachadh Comment[gl]=Administra os temas do escritorio Comment[gl_ES]=Administra os temas do escritorio Comment[hr]=Upravljajte temama za promjenu izgleda vaše radne površine Comment[hu]=Témák kezelése az asztal kinézetének megváltoztatásához Comment[hu_HU]=Témák kezelése az asztal kinézetének megváltoztatásához Comment[ia]=Administrar themas pro cambiar como tu scriptorio appare Comment[id]=Mengatur tema untuk mengubah tampilan desktop anda Comment[id_ID]=Mengatur tema untuk mengubah tampilan desktop anda Comment[is]=Sýsla með þemu til að breyta útliti skjáborðsins Comment[it]=Gestisci i temi per cambiare l'aspetto dek desktop Comment[it_CH]=Gestisci i temi per cambiare l'aspetto dek desktop Comment[it_IT]=Gestisci i temi per cambiare l'aspetto dek desktop Comment[ko]=테마 관리는 여러분의 컴퓨터를 달라 보이게 할 겁니다 Comment[ko_KR]=테마 관리는 여러분의 컴퓨터를 달라 보이게 할 겁니다 Comment[lt]=Tvarkykite stilius darbalaukio vaizdui pakeisti Comment[lt_LT]=Tvarkykite stilius darbalaukio vaizdui pakeisti Comment[lv]=Pārvaldīt motīvus, lai mainītu jūsu darbvirsmas izskatu Comment[lv_LV]=Pārvaldīt motīvus, lai mainītu jūsu darbvirsmas izskatu Comment[ms]=Mengurus tema untuk tukar bagaimana rupa desktop anda Comment[ms_MY]=Mengurus tema untuk tukar bagaimana rupa desktop anda Comment[nb]=Tilpass tema for å endre hvordan skrivebordet ser ut Comment[nb_NO]=Tilpass tema for å endre hvordan skrivebordet ser ut Comment[nds]=Themen verwalten, um den Desktop auf Ihre Bedürfnisse einzurichten Comment[nl]=Thema's beheren om te veranderen hoe uw bureaublad eruit ziet Comment[nl_NL]=Thema's beheren om te veranderen hoe uw bureaublad eruit ziet Comment[pl]=Zarządzaj motywami, aby zmienić wygląd pulpitu Comment[pl_PL]=Zarządzaj motywami, aby zmienić wygląd pulpitu Comment[pt]=Gerir temas para mudar como o seu ambiente de trabalho aparenta Comment[pt_BR]=Gerenciar temas para mudar aparência em sua área de trabalho Comment[pt_PT]=Gerir temas para mudar como o seu ambiente de trabalho aparenta Comment[ro]=Gestionează temele pentru a schimba aspectul desktopului Comment[ro_RO]=Gestionează temele pentru a schimba aspectul desktopului Comment[ru]=Управление темами внешнего вида рабочего стола Comment[sk]=Spravovať motívy na zmenu vzhľadu prostredia Comment[sk_SK]=Spravovať motívy na zmenu vzhľadu prostredia Comment[sl]=Upravljajte s temami za spreminjanje izgleda vašega namizja Comment[sl_SI]=Upravljajte s temami za spreminjanje izgleda vašega namizja Comment[sq]=Menaxhoni temat për të ndryshuar si duket desktopi juaj Comment[sr]=Управљајте темама да измените изглед радне површи Comment[sr@Latn]=Управљајте темама да измените изглед радне површи Comment[sr@ije]=Управљајте темама да измените изглед радне површи Comment[sr@ijekavianlatin]=Управљајте темама да измените изглед радне површи Comment[sr@latin]=Управљајте темама да измените изглед радне површи Comment[sr_RS]=Управљајте темама да измените изглед радне површи Comment[sr_RS@latin]=Управљајте темама да измените изглед радне површи Comment[sv]=Hantera teman för att ändra hur ditt skrivbord ser ut Comment[tg]=Идоракунии мавзӯҳо ва намуди зоҳирии мизи корӣ Comment[th]=จัดการชุดตกแต่งเพื่อเปลี่ยนว่าจะให้พื้นโต๊ะของคุณมีมุมมองอย่างไรบ้าง Comment[th_TH]=จัดการชุดตกแต่งเพื่อเปลี่ยนว่าจะให้พื้นโต๊ะของคุณมีมุมมองอย่างไรบ้าง Comment[tr]=Masaüstü görüntünüzü özelleştirmek için temaları yönetin Comment[tr_TR]=Masaüstü görüntünüzü özelleştirmek için temaları yönetin Comment[uk]=Керуйте темами, щоб змінити вигляд Вашої стільниці Comment[uk_UA]=Керуйте темами, щоб змінити вигляд Вашої стільниці Comment[vi]=Quản lý chủ đề để thay đổi dáng vẻ màn hình làm việc Comment[vi_VN]=Quản lý chủ đề để thay đổi dáng vẻ màn hình làm việc Comment[zh_CN]=管理主体以改变您桌面的外貌 Comment[zh_HK]=管理佈景主題以變更你的桌面外觀 Comment[zh_TW]=管理佈景主題以變更您的桌面外觀 Keywords=themes;style; Keywords[am]=ገጽታዎች ፡ ዘዴ; Keywords[ar]=سمات، طراز; Keywords[ast]=temes;estilu; Keywords[be]=тэмы;стыль; Keywords[be@latin]=тэмы;стыль; Keywords[be_BY]=тэмы;стыль; Keywords[bg]=тема;стил; Keywords[bg_BG]=тема;стил; Keywords[bs]=teme;stilovi; Keywords[ca]=temes;estil; Keywords[ca@valencia]=temes;estil; Keywords[ca_ES]=temes;estil; Keywords[ca_ES@valencia]=temes;estil; Keywords[cs]=motivy;styl; Keywords[cs_CZ]=motivy;styl; Keywords[cy]=themâu;arddulliau; Keywords[da]=temaer;stil; Keywords[da_DK]=temaer;stil; Keywords[de]=Themen;Thema;themes;Stilarten;Style;Design;Aussehen;Darstellung;Erscheinungsbild;Motiv; Keywords[de_CH]=Themen;Thema;themes;Stilarten;Style;Design;Aussehen;Darstellung;Erscheinungsbild;Motiv; Keywords[de_DE]=Themen;Thema;themes;Stilarten;Style;Design;Aussehen;Darstellung;Erscheinungsbild;Motiv; Keywords[el]=θέμα;εμφάνιση;στύλ; Keywords[es]=temas;estilo; Keywords[es_AR]=temas;estilo; Keywords[es_CL]=temas;estilo; Keywords[es_CO]=temas;estilo; Keywords[es_CR]=temas;estilo; Keywords[es_DO]=temas;estilo; Keywords[es_EC]=temas;estilo; Keywords[es_ES]=temas;estilo; Keywords[es_MX]=temas;estilo; Keywords[es_NI]=temas;estilo; Keywords[es_PA]=temas;estilo; Keywords[es_PE]=temas;estilo; Keywords[es_PR]=temas;estilo; Keywords[es_SV]=temas;estilo; Keywords[es_UY]=temas;estilo; Keywords[es_VE]=temas;estilo; Keywords[et]=teemad;stiil; Keywords[et_EE]=teemad;stiil; Keywords[eu]=gaiak;estiloa; Keywords[fi]=teemat;tyyli; Keywords[fi_FI]=teemat;tyyli; Keywords[fr]=thèmes;style; Keywords[fr_CA]=thèmes;style; Keywords[fr_FR]=thèmes;style; Keywords[ga]=téamaí;stíl; Keywords[gd]=tèamaichean;stoidhle; Keywords[gl]=temas;estilo; Keywords[gl_ES]=temas;estilo; Keywords[hr]=teme;izgled; Keywords[hu]=témák;stílus; Keywords[hu_HU]=témák;stílus; Keywords[ia]=themas;stilo; Keywords[id]=tema;gaya; Keywords[id_ID]=tema;gaya; Keywords[is]=þemu;stíll; Keywords[it]=tema;stile; Keywords[it_CH]=tema;stile; Keywords[it_IT]=tema;stile; Keywords[ja]=テーマ、スタイル; Keywords[ja_JP]=テーマ、スタイル; Keywords[ka]=თემები;სტილი; Keywords[ko]=테마;스타일; Keywords[ko_KR]=테마;스타일; Keywords[lv]=motīvi;stils; Keywords[lv_LV]=motīvi;stils; Keywords[ms]=tema;gaya; Keywords[ms_MY]=tema;gaya; Keywords[nb]=temaer;stil; Keywords[nb_NO]=temaer;stil; Keywords[nds]=Themen;Stil; Keywords[nl]=thema's;stijl; Keywords[nl_NL]=thema's;stijl; Keywords[om]=dhamsawwan;haalata; Keywords[pl]=motywy;style; Keywords[pl_PL]=motywy;style; Keywords[pt]=temas;estilo; Keywords[pt_BR]=temas;estilo; Keywords[pt_PT]=temas;estilo; Keywords[ro]=teme;stil; Keywords[ro_RO]=teme;stil; Keywords[ru]=темы;стиль; Keywords[sk]=motívy;témy;štýl; Keywords[sk_SK]=motívy;témy;štýl; Keywords[sl]=teme;slog; Keywords[sl_SI]=teme;slog; Keywords[sq]=temat;stili; Keywords[sr]=тема;начин приказа; Keywords[sr@Latn]=тема;начин приказа; Keywords[sr@ije]=тема;начин приказа; Keywords[sr@ijekavianlatin]=тема;начин приказа; Keywords[sr@latin]=тема;начин приказа; Keywords[sr_RS]=тема;начин приказа; Keywords[sr_RS@latin]=тема;начин приказа; Keywords[sv]=tema;stil; Keywords[ta]=அலங்காரங்கள்;பாணி; Keywords[ta_LK]=அலங்காரங்கள்;பாணி; Keywords[tg]=мавзӯъ;сабк; Keywords[th]=ชุดตกแต่ง;รูปแบบ; Keywords[th_TH]=ชุดตกแต่ง;รูปแบบ; Keywords[tr]=temalar;stiller; Keywords[tr_TR]=temalar;stiller; Keywords[uk]=теми;стиль; Keywords[uk_UA]=теми;стиль; Keywords[ur]=شکل(theme)، انداز (style); Keywords[vi]=chủ đề;kiểu dáng; Keywords[vi_VN]=chủ đề;kiểu dáng; Keywords[zh_CN]=主题,样式; Keywords[zh_HK]=佈景主題;樣式; Keywords[zh_TW]=佈景主題;樣式; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-default.desktop0000664000175000017500000007457513215735076026430 0ustar fabiofabio[Desktop Entry] Icon=cs-default-applications Exec=cinnamon-settings default Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Preferred Applications Name[am]=የመረጥኩዋቸው መተግበሪያዎች Name[ar]=التطبيقات المفضّلة Name[ast]=Aplicaciones preferíes Name[be]=Пераважныя дастасаванні Name[be@latin]=Пераважныя дастасаванні Name[be_BY]=Пераважныя дастасаванні Name[bg]=Предпочитани програми Name[bg_BG]=Предпочитани програми Name[bs]=Preferirane aplikacije Name[ca]=Aplicacions preferides Name[ca@valencia]=Aplicacions preferides Name[ca_ES]=Aplicacions preferides Name[ca_ES@valencia]=Aplicacions preferides Name[cs]=Preferované aplikace Name[cs_CZ]=Preferované aplikace Name[cy]=Rhaglenni Dewisol Name[da]=Foretrukne programmer Name[da_DK]=Foretrukne programmer Name[de]=Bevorzugte Anwendungen Name[de_CH]=Bevorzugte Anwendungen Name[de_DE]=Bevorzugte Anwendungen Name[el]=Προτιμώμενες Εφαρμογές Name[eo]=Preferaj Aplikaĵoj Name[es]=Aplicaciones preferidas Name[es_AR]=Aplicaciones preferidas Name[es_CL]=Aplicaciones preferidas Name[es_CO]=Aplicaciones preferidas Name[es_CR]=Aplicaciones preferidas Name[es_DO]=Aplicaciones preferidas Name[es_EC]=Aplicaciones preferidas Name[es_ES]=Aplicaciones preferidas Name[es_MX]=Aplicaciones preferidas Name[es_NI]=Aplicaciones preferidas Name[es_PA]=Aplicaciones preferidas Name[es_PE]=Aplicaciones preferidas Name[es_PR]=Aplicaciones preferidas Name[es_SV]=Aplicaciones preferidas Name[es_UY]=Aplicaciones preferidas Name[es_VE]=Aplicaciones preferidas Name[et]=Eelistatud rakendused Name[et_EE]=Eelistatud rakendused Name[eu]=Hobetsitako aplikazioak Name[fi]=Oletussovellukset Name[fi_FI]=Oletussovellukset Name[fr]=Applications préférées Name[fr_CA]=Applications préférées Name[fr_FR]=Applications préférées Name[gd]=Aplacaidean as fhearr leat Name[gl]=Aplicativos preferidos Name[gl_ES]=Aplicativos preferidos Name[hr]=Željene aplikacije Name[hu]=Alapértelmezett alkalmazások Name[hu_HU]=Alapértelmezett alkalmazások Name[ia]=Applicationes preferite Name[id]=Aplikasi Pilihan Name[id_ID]=Aplikasi Pilihan Name[is]=Sjálfgefin forrit Name[it]=Applicazioni preferite Name[it_CH]=Applicazioni preferite Name[it_IT]=Applicazioni preferite Name[ja]=お気に入りのアプリケーション Name[ja_JP]=お気に入りのアプリケーション Name[kab]=Isnasen imenyafen Name[ko]=기본 애플리케이션 Name[ko_KR]=기본 애플리케이션 Name[lo]=ໂປຣແກຣມທີ່ເລືອກ Name[lo_LA]=ໂປຣແກຣມທີ່ເລືອກ Name[lt]=Pageidaujamos programos Name[lt_LT]=Pageidaujamos programos Name[lv]=Noklusētās programmas Name[lv_LV]=Noklusētās programmas Name[ms]=Aplikasi Digemari Name[ms_MY]=Aplikasi Digemari Name[nb]=Foretrukne programmer Name[nb_NO]=Foretrukne programmer Name[nds]=Bevorzugte Anwendungen Name[nl]=Voorkeurstoepassingen Name[nl_NL]=Voorkeurstoepassingen Name[oc]=Aplicacions preferidas Name[pl]=Preferowane programy Name[pl_PL]=Preferowane programy Name[pt]=Aplicações Preferidas Name[pt_BR]=Aplicativos Preferenciais Name[pt_PT]=Aplicações Preferidas Name[ro]=Aplicații preferate Name[ro_RO]=Aplicații preferate Name[ru]=Предпочитаемые приложения Name[sk]=Predvolené aplikácie Name[sk_SK]=Predvolené aplikácie Name[sl]=Prednostni programi Name[sl_SI]=Prednostni programi Name[sq]=Programet e preferuara Name[sr]=Омиљени програми Name[sr@Latn]=Омиљени програми Name[sr@ije]=Омиљени програми Name[sr@ijekavianlatin]=Омиљени програми Name[sr@latin]=Омиљени програми Name[sr_RS]=Омиљени програми Name[sr_RS@latin]=Омиљени програми Name[sv]=Förvalda program Name[th]=โปรแกรมที่ชอบ Name[th_TH]=โปรแกรมที่ชอบ Name[tr]=Tercih Edilen Uygulamalar Name[tr_TR]=Tercih Edilen Uygulamalar Name[uk]=Уподобані проґрами Name[uk_UA]=Уподобані проґрами Name[ur]=ترجیحی ایپلی کیشنز Name[uz]=Танланган дастурлар Name[uz@cyrillic]=Танланган дастурлар Name[vi]=Ứng dụng Ưa thích Name[vi_VN]=Ứng dụng Ưa thích Name[zh_CN]=首选应用程序 Name[zh_HK]=喜好的應用程式 Name[zh_TW]=偏好的應用程式 Comment=Preferred Applications Comment[am]=የመረጥኩዋቸው መተግበሪያዎች Comment[ar]=التطبيقات المفضّلة Comment[ast]=Aplicaciones preferíes Comment[be]=Пераважныя дастасаванні Comment[be@latin]=Пераважныя дастасаванні Comment[be_BY]=Пераважныя дастасаванні Comment[bg]=Предпочитани програми Comment[bg_BG]=Предпочитани програми Comment[bs]=Preferirane aplikacije Comment[ca]=Aplicacions preferides Comment[ca@valencia]=Aplicacions preferides Comment[ca_ES]=Aplicacions preferides Comment[ca_ES@valencia]=Aplicacions preferides Comment[cs]=Preferované aplikace Comment[cs_CZ]=Preferované aplikace Comment[cy]=Rhaglenni Dewisol Comment[da]=Foretrukne programmer Comment[da_DK]=Foretrukne programmer Comment[de]=Bevorzugte Anwendungen Comment[de_CH]=Bevorzugte Anwendungen Comment[de_DE]=Bevorzugte Anwendungen Comment[el]=Προτιμώμενες Εφαρμογές Comment[eo]=Preferaj Aplikaĵoj Comment[es]=Aplicaciones preferidas Comment[es_AR]=Aplicaciones preferidas Comment[es_CL]=Aplicaciones preferidas Comment[es_CO]=Aplicaciones preferidas Comment[es_CR]=Aplicaciones preferidas Comment[es_DO]=Aplicaciones preferidas Comment[es_EC]=Aplicaciones preferidas Comment[es_ES]=Aplicaciones preferidas Comment[es_MX]=Aplicaciones preferidas Comment[es_NI]=Aplicaciones preferidas Comment[es_PA]=Aplicaciones preferidas Comment[es_PE]=Aplicaciones preferidas Comment[es_PR]=Aplicaciones preferidas Comment[es_SV]=Aplicaciones preferidas Comment[es_UY]=Aplicaciones preferidas Comment[es_VE]=Aplicaciones preferidas Comment[et]=Eelistatud rakendused Comment[et_EE]=Eelistatud rakendused Comment[eu]=Hobetsitako aplikazioak Comment[fi]=Oletussovellukset Comment[fi_FI]=Oletussovellukset Comment[fr]=Applications préférées Comment[fr_CA]=Applications préférées Comment[fr_FR]=Applications préférées Comment[gd]=Aplacaidean as fhearr leat Comment[gl]=Aplicativos preferidos Comment[gl_ES]=Aplicativos preferidos Comment[hr]=Željene aplikacije Comment[hu]=Alapértelmezett alkalmazások Comment[hu_HU]=Alapértelmezett alkalmazások Comment[ia]=Applicationes preferite Comment[id]=Aplikasi Pilihan Comment[id_ID]=Aplikasi Pilihan Comment[is]=Sjálfgefin forrit Comment[it]=Applicazioni preferite Comment[it_CH]=Applicazioni preferite Comment[it_IT]=Applicazioni preferite Comment[ja]=お気に入りのアプリケーション Comment[ja_JP]=お気に入りのアプリケーション Comment[kab]=Isnasen imenyafen Comment[ko]=기본 애플리케이션 Comment[ko_KR]=기본 애플리케이션 Comment[lo]=ໂປຣແກຣມທີ່ເລືອກ Comment[lo_LA]=ໂປຣແກຣມທີ່ເລືອກ Comment[lt]=Pageidaujamos programos Comment[lt_LT]=Pageidaujamos programos Comment[lv]=Noklusētās programmas Comment[lv_LV]=Noklusētās programmas Comment[ms]=Aplikasi Digemari Comment[ms_MY]=Aplikasi Digemari Comment[nb]=Foretrukne programmer Comment[nb_NO]=Foretrukne programmer Comment[nds]=Bevorzugte Anwendungen Comment[nl]=Voorkeurstoepassingen Comment[nl_NL]=Voorkeurstoepassingen Comment[oc]=Aplicacions preferidas Comment[pl]=Preferowane programy Comment[pl_PL]=Preferowane programy Comment[pt]=Aplicações Preferidas Comment[pt_BR]=Aplicativos Preferenciais Comment[pt_PT]=Aplicações Preferidas Comment[ro]=Aplicații preferate Comment[ro_RO]=Aplicații preferate Comment[ru]=Предпочитаемые приложения Comment[sk]=Predvolené aplikácie Comment[sk_SK]=Predvolené aplikácie Comment[sl]=Prednostni programi Comment[sl_SI]=Prednostni programi Comment[sq]=Programet e preferuara Comment[sr]=Омиљени програми Comment[sr@Latn]=Омиљени програми Comment[sr@ije]=Омиљени програми Comment[sr@ijekavianlatin]=Омиљени програми Comment[sr@latin]=Омиљени програми Comment[sr_RS]=Омиљени програми Comment[sr_RS@latin]=Омиљени програми Comment[sv]=Förvalda program Comment[th]=โปรแกรมที่ชอบ Comment[th_TH]=โปรแกรมที่ชอบ Comment[tr]=Tercih Edilen Uygulamalar Comment[tr_TR]=Tercih Edilen Uygulamalar Comment[uk]=Уподобані проґрами Comment[uk_UA]=Уподобані проґрами Comment[ur]=ترجیحی ایپلی کیشنز Comment[uz]=Танланган дастурлар Comment[uz@cyrillic]=Танланган дастурлар Comment[vi]=Ứng dụng Ưa thích Comment[vi_VN]=Ứng dụng Ưa thích Comment[zh_CN]=首选应用程序 Comment[zh_HK]=喜好的應用程式 Comment[zh_TW]=偏好的應用程式 Keywords=media;defaults;applications;programs;removable;browser;email;calendar;music;videos;photos;images;cd;autostart;autoplay; Keywords[am]=መገናኛዎች፡ መተግበሪያዎች፡ ፕሮግራሞች፡ የሚወልቁ፡ መቃኛ፡ ኢሜይል፡ ቀን መቁጠሪያ፡ ሙዚቃ፡ ቪዲዮዎች፡ ፎቶዎች፡ ምስሎች፡ ሲዲ፡ በራሱ ማስጀመሪያ፡ በራሱ ማጫወቻ; Keywords[ar]=وسيط، افتراضي، برامج، تطبيقات، قابل للإزالة، متصفح، بريد إلكتروني، تاريخ، موسيقى، فيديو، صور، cd، بدء تشغيل، تشغيل آلي; Keywords[be]=носьбіты;значэнні па змаўчанні;дастасаваннi;праграмы;зменны;браўзэр;пошта;каляндар;музыка;відэа;фота;выявы;CD-дыск;аўтазапуск;аўтапрайграванне; Keywords[be@latin]=носьбіты;значэнні па змаўчанні;дастасаваннi;праграмы;зменны;браўзэр;пошта;каляндар;музыка;відэа;фота;выявы;CD-дыск;аўтазапуск;аўтапрайграванне; Keywords[be_BY]=носьбіты;значэнні па змаўчанні;дастасаваннi;праграмы;зменны;браўзэр;пошта;каляндар;музыка;відэа;фота;выявы;CD-дыск;аўтазапуск;аўтапрайграванне; Keywords[bg]=медия;подразбиране;приложения;програми;преносими;браузер;поща;календар;музика;видео;фото;изображения;диск;стартиращи;автоматично; Keywords[bg_BG]=медия;подразбиране;приложения;програми;преносими;браузер;поща;календар;музика;видео;фото;изображения;диск;стартиращи;автоматично; Keywords[bs]=media;zadano;aplikacije;programi;uklonljivo;preglednik;elektronska pošta;muzika;video;fotografije;slike;cd;automatski start;automatsko reproduciranje; Keywords[ca]=suports;valors predeterminats;aplicacions;programes;extraïble;navegador;correu electrònic;cal·lendari;música;vídeos;fotos;imatges;cd;arrencada automàtica;reproducció automàtica; Keywords[ca@valencia]=suports;valors predeterminats;aplicacions;programes;extraïble;navegador;correu electrònic;calendari;música;vídeos;fotos;imatges;cd;arrancada automàtica;reproducció automàtica; Keywords[ca_ES]=suports;valors predeterminats;aplicacions;programes;extraïble;navegador;correu electrònic;cal·lendari;música;vídeos;fotos;imatges;cd;arrencada automàtica;reproducció automàtica; Keywords[ca_ES@valencia]=suports;valors predeterminats;aplicacions;programes;extraïble;navegador;correu electrònic;calendari;música;vídeos;fotos;imatges;cd;arrancada automàtica;reproducció automàtica; Keywords[cs]=média;výchozí;aplikace;programy;odpojitelný;prohlížeč;email;kalendář;hudba;video;fotky;obrázky;cd;automatický start;automatické přehrávání; Keywords[cs_CZ]=média;výchozí;aplikace;programy;odpojitelný;prohlížeč;email;kalendář;hudba;video;fotky;obrázky;cd;automatický start;automatické přehrávání; Keywords[cy]=cyfrwng;rhagosodiadau;rhaglenni;tynnadwy;porwr;e-bost;calendr;fideos;lluniau;delweddau;cd;awtogychwyn;awtochwarae; Keywords[da]=medier;standard;programmer;flytbar;browser;e-mail;kalender;musik;videoer;fotoer;billeder;cd;autostart;autoafspilning; Keywords[da_DK]=medier;standard;programmer;flytbar;browser;e-mail;kalender;musik;videoer;fotoer;billeder;cd;autostart;autoafspilning; Keywords[de]=Medien;Vorgaben;Grundeinstellungen;Anwendungen;Programme;entfernbare;Datenträger;Browser;Email;E-Mail;Kalender;Musik;Videos;Filme;Fotos;Bilder;CD;Autostart; Keywords[de_CH]=Medien;Vorgaben;Grundeinstellungen;Anwendungen;Programme;entfernbare;Datenträger;Browser;Email;E-Mail;Kalender;Musik;Videos;Filme;Fotos;Bilder;CD;Autostart; Keywords[de_DE]=Medien;Vorgaben;Grundeinstellungen;Anwendungen;Programme;entfernbare;Datenträger;Browser;Email;E-Mail;Kalender;Musik;Videos;Filme;Fotos;Bilder;CD;Autostart; Keywords[el]=μέσα;προεπιλογές;εφαρμογές;προγράμματα;αφαιρούμενα;περιηγητής;ηλεκτρονικό ταχυδρομείο;ημερολόγιο;μουσική;βίντεο;φωτογραφίες;εικόνες;cd;αυτόματη εκκίνηση;αυτόματη αναπαραγωγή; Keywords[es]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_AR]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_CL]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_CO]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_CR]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_DO]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_EC]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_ES]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_MX]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_NI]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_PA]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_PE]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_PR]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_SV]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_UY]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[es_VE]=soportes;valores predeterminados;aplicaciones;programas;extraíble;navegador;correo electrónico;calendario;música;videos;fotos;imágenes;cd;arranque automático;reproducción automática; Keywords[eu]=euskarria;lehenespenak;aplikazioak;programak;aldagarria;nabigatzailea;e-posta;egutegia;musika;bideoak;argazkiak;irudiak;cd;hasi automatikoki;erreproduzitu automatikoki; Keywords[fi]=media;oletukset;sovellukset;ohjelmat;siirrettävä;selain;sähköposti;kalenteri;musiikki;videot;kuvat;cd;autostart;autoplay; Keywords[fi_FI]=media;oletukset;sovellukset;ohjelmat;siirrettävä;selain;sähköposti;kalenteri;musiikki;videot;kuvat;cd;autostart;autoplay; Keywords[fr]=médias;par défaut;applications;programmes;amovible;navigateur;courrier électronique;calendrier;musique;vidéos;photos;images;cd;démarrage automatique;lecture automatique; Keywords[fr_CA]=médias;par défaut;applications;programmes;amovible;navigateur;courriel;calendrier;musique;vidéos;photos;images;cd;démarrage automatique;lecture automatique; Keywords[fr_FR]=médias;par défaut;applications;programmes;amovible;navigateur;courrier électronique;calendrier;musique;vidéos;photos;images;cd;démarrage automatique;lecture automatique; Keywords[gd]=media;defaults;applications;programs;removable;browser;email;calendar;music;videos;photos;images;cd;autostart;autoplay;meadhanan;bun-roghainnean;aplacaidean;prògraman;brabhsair;post-d;mìosachan;ceòl;videothan;bhidiothan;dealbhan;fèin-chluich;fèin-tòiseachadh; Keywords[gl]=medios;valores predeterminados;aplicativos;programas;extraíbel;navegador;correo electrónico;calendario;música;vídeos;fotos;imaxes;cd;arrinque automático;reprodución automática; Keywords[gl_ES]=medios;valores predeterminados;aplicativos;programas;extraíbel;navegador;correo electrónico;calendario;música;vídeos;fotos;imaxes;cd;arrinque automático;reprodución automática; Keywords[hr]=medij;uobičajeno;aplikacije;programi;prijenosni;preglednik;e-pošta;kalendar;glazba;video;fotografije;slike;cd;auto-pokretanje;auto-reprodukcija; Keywords[hu]=média;alapértelmezések;alkalmazások;programok;eltávolítandó;böngésző;kereső;email;naptár;zene;videók;fotók;képek;cd;automatikus indítás;automatikus lejátszás; Keywords[hu_HU]=média;alapértelmezések;alkalmazások;programok;eltávolítandó;böngésző;kereső;email;naptár;zene;videók;fotók;képek;cd;automatikus indítás;automatikus lejátszás; Keywords[ia]=medios;optiones predefinite;applicationes;programmas;amovibile;navigator;e-posta;calendario;musica;videos;photos;imagines;cd;lanceamento automatic;reproduction automatic; Keywords[id]=media;defaults;aplikasi;program;removable;browser;email;kalender;musik;video;foto;gambar;cd;autostart;autoplay; Keywords[id_ID]=media;defaults;aplikasi;program;removable;browser;email;kalender;musik;video;foto;gambar;cd;autostart;autoplay; Keywords[is]=miðlar;sjálfgefið;forrit;fjarlægjanleg;vafri;póstur;dagatal;tónlist;vídeó;myndskeið;myndir;cd;sjálfkeyrsla;sjálfspila; Keywords[it]=media;defaults;applicazioni;programmi;rimovibile;browser;email;calendario;musica;video;foto;immagini;cd;autostart;autoplay; Keywords[it_CH]=media;defaults;applicazioni;programmi;rimovibile;browser;email;calendario;musica;video;foto;immagini;cd;autostart;autoplay; Keywords[it_IT]=media;defaults;applicazioni;programmi;rimovibile;browser;email;calendario;musica;video;foto;immagini;cd;autostart;autoplay; Keywords[kab]=amidya;s lexṣas;isnasen;ahilen;aziraz;iminig;emayl;akalandri;aẓawan;ividyuten;tugniwin;icdiyen;askar awurman;taɣuri tawurmant; Keywords[ko]=미디어;기본;애플리케이션;프로그램;이동식;브라우저;이메일;달력;음악;비디오;사진;이미지;CD;자동시작;자동재생; Keywords[ko_KR]=미디어;기본;애플리케이션;프로그램;이동식;브라우저;이메일;달력;음악;비디오;사진;이미지;CD;자동시작;자동재생; Keywords[lo]=ສື່;ຄ່າເລີ່ມຕົ້ນ;ໂປຣແກຣມ;ໂປຣແກຣມ;ອູປະກອນຖອດສຽບ;ບຣາວເຊີ;ອີເມວ;ປະຕິທິນ;ເພງ;ວີດີໂອ;ຮູບພາບ;ອິມເມດ;ຊີດີ;autostart;autoplay; Keywords[lo_LA]=ສື່;ຄ່າເລີ່ມຕົ້ນ;ໂປຣແກຣມ;ໂປຣແກຣມ;ອູປະກອນຖອດສຽບ;ບຣາວເຊີ;ອີເມວ;ປະຕິທິນ;ເພງ;ວີດີໂອ;ຮູບພາບ;ອິມເມດ;ຊີດີ;autostart;autoplay; Keywords[lt]=media;numatytieji;programos;išimamos laikmenos;naršyklė;el. paštas;kalendorius;muzika;vaizdo įrašai;nuotraukos;cd;auto paleidimas;auto atkūrimas; Keywords[lt_LT]=media;numatytieji;programos;išimamos laikmenos;naršyklė;el. paštas;kalendorius;muzika;vaizdo įrašai;nuotraukos;cd;auto paleidimas;auto atkūrimas; Keywords[lv]=multivide;noklusējuma iestatījumi;lietotnes;programmas;noņemams;pārlūks;e-pasts;kalendārs;mūzika;video;fotogrāfijas;attēli;CD;automātiskā sākšana;automātiskā atskaņošana; Keywords[lv_LV]=multivide;noklusējuma iestatījumi;lietotnes;programmas;noņemams;pārlūks;e-pasts;kalendārs;mūzika;video;fotogrāfijas;attēli;CD;automātiskā sākšana;automātiskā atskaņošana; Keywords[ms]=media;tetapan asal;aplikasi-aplikasi;program-program;boleh alih;pelayar;emel;kalendar;musik;video;foto;gambar;cd;mula secara auto;main secara auto; Keywords[ms_MY]=media;tetapan asal;aplikasi-aplikasi;program-program;boleh alih;pelayar;emel;kalendar;musik;video;foto;gambar;cd;mula secara auto;main secara auto; Keywords[nb]=media;standard;applikasjoner;programmer;flyttbar;nettleser;e-post;kalender;musikk;videoer;foto;bilder;cd;autostart;autospill; Keywords[nb_NO]=media;standard;applikasjoner;programmer;flyttbar;nettleser;e-post;kalender;musikk;videoer;foto;bilder;cd;autostart;autospill; Keywords[nds]=Medien;Standards;Anwendungen;Programme;Entfernbar;Browser;E-Mail;Kalender;Musik;Videos;Fotos;Bilder;CD;Autostart;AutoPlay; Keywords[nl]=media;standaard;toepassingen;programma's;verwijderbaar;browser;e-mail;kalender;muziek;video's;afbeeldingen;cd;automatische start;automatisch afspelen; Keywords[nl_NL]=media;standaard;toepassingen;programma's;verwijderbaar;browser;e-mail;kalender;muziek;video's;afbeeldingen;cd;automatische start;automatisch afspelen; Keywords[pl]=media;domyślne;aplikacje;programy;nośniki wymienne;przeglądarka;e-mail;kalendarz;muzyka;filmy;zdjęcia;obrazy;cd;autostart;autoodtwarzanie; Keywords[pl_PL]=media;domyślne;aplikacje;programy;nośniki wymienne;przeglądarka;e-mail;kalendarz;muzyka;filmy;zdjęcia;obrazy;cd;autostart;autoodtwarzanie; Keywords[pt]=media;defaults;applications;programs;removable;browser;email;calendar;music;videos;photos;images;cd;autostart;autoplay;média;padrões;aplicações;programas;removível;navegador;correio;calendário;música;vídeos;fotografias;imagens;cds;arranque;automático; Keywords[pt_BR]=mídia;padrões;aplicativos;programas;dispositivos removíveis;navegador;e-mail;calendário;música;vídeos;fotos;imagens;cd;inicializar automaticamente;reproduzir automaticamente; Keywords[pt_PT]=media;defaults;applications;programs;removable;browser;email;calendar;music;videos;photos;images;cd;autostart;autoplay;média;padrões;aplicações;programas;removível;navegador;correio;calendário;música;vídeos;fotografias;imagens;cds;arranque;automático; Keywords[ro]=media;implicite;aplicații;programe;detașabil;browser;e-mail;calendar;muzică;clipuri video;fotografii;imagini;CD;pornire automată;redare automată; Keywords[ro_RO]=media;implicite;aplicații;programe;detașabil;browser;e-mail;calendar;muzică;clipuri video;fotografii;imagini;CD;pornire automată;redare automată; Keywords[ru]=носители;значения по умолчанию;приложения;программы;съёмный;браузер;почта;календарь;музыка;видео;фото;изображения;CD-диск;автозапуск;автовоспроизведение; Keywords[sk]=médiá;predvolené hodnoty;aplikácie;programy;odstrániteľné;vymeniteľné;prehliadač;email;kalendár;hudba;videá;fotky;obrázky;cd;samospúšťanie;samoprehrávanie;automatické spúšťanie;automatické prehrávanie; Keywords[sk_SK]=médiá;predvolené hodnoty;aplikácie;programy;odstrániteľné;vymeniteľné;prehliadač;email;kalendár;hudba;videá;fotky;obrázky;cd;samospúšťanie;samoprehrávanie;automatické spúšťanie;automatické prehrávanie; Keywords[sl]=predstavnost;privzeto;programi;odstranljivo;brskalnik;epošta;koledar;glasba;video;fotografije;slike;cd;samodejno začni;samodejno predvajanje; Keywords[sl_SI]=predstavnost;privzeto;programi;odstranljivo;brskalnik;epošta;koledar;glasba;video;fotografije;slike;cd;samodejno začni;samodejno predvajanje; Keywords[sr]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr@Latn]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr@ije]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr@ijekavianlatin]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr@latin]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr_RS]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sr_RS@latin]=садржаји;подразумевано;програми;апликације;уклоњив;прегледник;е-пошта;календар;музика;снимци;фотографије;слике;дискови;самопокретање;извођење; Keywords[sv]=media;standard;applikationer;program;flyttbara;webbläsare;e-post;kalender;musik;videor;foton;bilder;cd;autostarta;autouppspelning; Keywords[th]=สื่อ;ค่าเริ่มต้น;โปรแกรมประยุกต์;สื่อถอดเสียบ;โปรแกรมท่องดู;อีเมล;ปฏิทิน;เพลง;วีดิทัศน์;รูปถ่าย;รูปภาพ;ซีดี;เริ่มอัตโนมัติ;เล่นอัตโนมัติ; Keywords[th_TH]=สื่อ;ค่าเริ่มต้น;โปรแกรมประยุกต์;สื่อถอดเสียบ;โปรแกรมท่องดู;อีเมล;ปฏิทิน;เพลง;วีดิทัศน์;รูปถ่าย;รูปภาพ;ซีดี;เริ่มอัตโนมัติ;เล่นอัตโนมัติ; Keywords[tr]=medya;varsayılanlar;uygulamalar;programlar;çıkarılabilir;tarayıcı;eposta;takvim;müzik;fotoğraflar;resimler;cd;otomatik başlat;otomatik oynat; Keywords[tr_TR]=medya;varsayılanlar;uygulamalar;programlar;çıkarılabilir;tarayıcı;eposta;takvim;müzik;fotoğraflar;resimler;cd;otomatik başlat;otomatik oynat; Keywords[uk]=медія;типові значення;додатки;проґрами;знімний;переглядач;електронна пошта;календар;музика;відео;світлини;зображення;CD;самозапуск;самовідтворення; Keywords[uk_UA]=медія;типові значення;додатки;проґрами;знімний;переглядач;електронна пошта;календар;музика;відео;світлини;зображення;CD;самозапуск;самовідтворення; Keywords[uz]=медиа;андозалар;қўлланилувчи дастурлар;дастурлар;олиб ташланиш имкони мавжуд;браузер;электрон хат;календар;мусиқа;видеолар;расмлар;тасвирлар;cd;автоматик ишга тушириш;автоматик ижро этиш; Keywords[uz@cyrillic]=медиа;андозалар;қўлланилувчи дастурлар;дастурлар;олиб ташланиш имкони мавжуд;браузер;электрон хат;календар;мусиқа;видеолар;расмлар;тасвирлар;cd;автоматик ишга тушириш;автоматик ижро этиш; Keywords[vi]=phương tiện;mặc định;ứng dụng;chương trình;tháo lắp;trình duyệt;điện thư;lịch;nhạc;phim;ảnh;hình;cd;tự chạy;tự phát; Keywords[vi_VN]=phương tiện;mặc định;ứng dụng;chương trình;tháo lắp;trình duyệt;điện thư;lịch;nhạc;phim;ảnh;hình;cd;tự chạy;tự phát; Keywords[zh_CN]=媒体,默认设置,应用,程序,可移动介质,浏览器,电子邮件,日历,音乐,视频,照片,图片,CD,自启动,自动播放; Keywords[zh_HK]=媒體;預設值;應用程式;程式;可移除式;瀏覽器;電郵;日曆;音樂;影片;相片;圖像;CD;自動啟動;自動播放; Keywords[zh_TW]=媒體;預設值;應用程式;程式;可移除;瀏覽器;email;行事曆;音樂;視訊;相片;影像;CD;自動啟動;自動播放; Cinnamon-3.6.7/files/usr/share/applications/cinnamon2d.desktop0000664000175000017500000000055313215735076023357 0ustar fabiofabio[Desktop Entry] Type=Application Name=Cinnamon 2D Comment=Window management and application launching Exec=/usr/bin/cinnamon2d Categories=GNOME;GTK;System;Core; OnlyShowIn=X-Cinnamon; NoDisplay=true X-GNOME-Autostart-Phase=WindowManager X-GNOME-Provides=panel;windowmanager; X-GNOME-Autostart-Notify=true X-GNOME-AutoRestart=true X-Ubuntu-Gettext-Domain=cinnamon Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-calendar.desktop0000664000175000017500000004732113215735076026542 0ustar fabiofabio[Desktop Entry] Icon=cs-date-time Exec=cinnamon-settings calendar Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Date & Time Name[am]=ቀን & ሰአት Name[ar]=التاريخ والوقت Name[ast]=Data y hora Name[be]=Дата і час Name[be@latin]=Дата і час Name[be_BY]=Дата і час Name[bg]=Дата и час Name[bg_BG]=Дата и час Name[bs]=Datum i vrijeme Name[ca]=Data i hora Name[ca@valencia]=Data i hora Name[ca_ES]=Data i hora Name[ca_ES@valencia]=Data i hora Name[cs]=Datum a čas Name[cs_CZ]=Datum a čas Name[cy]=Dyddiad ac Amser Name[da]=Dato & tid Name[da_DK]=Dato & tid Name[de]=Datum & Zeit Name[de_CH]=Datum & Zeit Name[de_DE]=Datum & Zeit Name[el]=Ημερομηνία & Ώρα Name[eo]=Dato kaj tempo Name[es]=Fecha y hora Name[es_AR]=Fecha y hora Name[es_CL]=Fecha y hora Name[es_CO]=Fecha y hora Name[es_CR]=Fecha y hora Name[es_DO]=Fecha y hora Name[es_EC]=Fecha y hora Name[es_ES]=Fecha y hora Name[es_MX]=Fecha y hora Name[es_NI]=Fecha y hora Name[es_PA]=Fecha y hora Name[es_PE]=Fecha y hora Name[es_PR]=Fecha y hora Name[es_SV]=Fecha y hora Name[es_UY]=Fecha y hora Name[es_VE]=Fecha y hora Name[et]=Kuupäev & kellaaeg Name[et_EE]=Kuupäev & kellaaeg Name[eu]=Data eta ordua Name[fa]=تاریخ و زمان Name[fa_AF]=تاریخ و زمان Name[fa_IR]=تاریخ و زمان Name[fi]=Päivä ja aika Name[fi_FI]=Päivä ja aika Name[fr]=Date & Heure Name[fr_CA]=Date et heure Name[fr_FR]=Date & Heure Name[fy]=Datum en Tiid Name[gd]=Ceann-là ⁊ Àm Name[gl]=Data e hora Name[gl_ES]=Data e hora Name[hr]=Datum i Vrijeme Name[hu]=Dátum és idő Name[hu_HU]=Dátum és idő Name[ia]=Data & tempore Name[id]=Tanggal & Waktu Name[id_ID]=Tanggal & Waktu Name[is]=Dagsetning og tími Name[it]=Data & Ora Name[it_CH]=Data & Ora Name[it_IT]=Data & Ora Name[ja]=日付と時刻 Name[ja_JP]=日付と時刻 Name[kab]=Azemz & Akud Name[ko]=날짜 & 시간 Name[ko_KR]=날짜 & 시간 Name[lo]=ວັນແລະເວລາ Name[lo_LA]=ວັນແລະເວລາ Name[lt]=Data ir laikas Name[lt_LT]=Data ir laikas Name[lv]=Datums un laiks Name[lv_LV]=Datums un laiks Name[ms]=Tarikh & Masa Name[ms_MY]=Tarikh & Masa Name[nb]=Dato og klokkeslett Name[nb_NO]=Dato og klokkeslett Name[nds]=Datum & Zeit Name[nl]=Datum en tijd Name[nl_NL]=Datum en tijd Name[oc]=Data & ora Name[pa]=ਮਿਤੀ ਤੇ ਸਮਾਂ Name[pl]=Data i godzina Name[pl_PL]=Data i godzina Name[pt]=Data e Hora Name[pt_BR]=Data & Hora Name[pt_PT]=Data e Hora Name[ro]=Dată și oră Name[ro_RO]=Dată și oră Name[ru]=Дата и время Name[sc]=Data & Oràriu Name[sk]=Dátum a čas Name[sk_SK]=Dátum a čas Name[sl]=Datum in čas Name[sl_SI]=Datum in čas Name[sq]=Data dhe Ora Name[sr]=Датум и време Name[sr@Latn]=Датум и време Name[sr@ije]=Датум и време Name[sr@ijekavianlatin]=Датум и време Name[sr@latin]=Датум и време Name[sr_RS]=Датум и време Name[sr_RS@latin]=Датум и време Name[sv]=Datum och tid Name[ta]=தேதியும் நேரமும் Name[ta_LK]=தேதியும் நேரமும் Name[tg]=Сана ва вақт: Name[th]=วันที่และเวลา Name[th_TH]=วันที่และเวลา Name[tr]=Tarih & Zaman Name[tr_TR]=Tarih & Zaman Name[uk]=Дата й час Name[uk_UA]=Дата й час Name[ur]=وقت اور تاريخ Name[uz]=Сана & Вақт Name[uz@cyrillic]=Сана & Вақт Name[vi]=Ngày giờ Name[vi_VN]=Ngày giờ Name[zh_CN]=日期和时间 Name[zh_HK]=日期與時間 Name[zh_TW]=日期與時間 Comment=Manage date and time settings Comment[am]=የ ቀን እና ሰአት ማሰናጃ አስተዳዳሪ Comment[ar]=إدارة إعدادات التاريخ والوقت Comment[ast]=Alministra los axustes de data y tiempu Comment[be]=Кіраванне наладамi даты і часу Comment[be@latin]=Кіраванне наладамi даты і часу Comment[be_BY]=Кіраванне наладамi даты і часу Comment[bg]=Управление на часа и датата Comment[bg_BG]=Управление на часа и датата Comment[bs]=Upravljajte postavkama datuma i vremena Comment[ca]=Gestioneu els ajusts de la data i l'hora Comment[ca@valencia]=Administra la configuració de data i hora Comment[ca_ES]=Gestioneu els ajusts de la data i l'hora Comment[ca_ES@valencia]=Administra la configuració de data i hora Comment[cs]=Nastavení data a času Comment[cs_CZ]=Nastavení data a času Comment[cy]=Rheolwch osodiadau dyddiad ac amser Comment[da]=Administrér dato- og tidsindstillinger Comment[da_DK]=Administrér dato- og tidsindstillinger Comment[de]=Datum- und Zeiteinstellungen verwalten Comment[de_CH]=Datum- und Zeiteinstellungen verwalten Comment[de_DE]=Datum- und Zeiteinstellungen verwalten Comment[el]=Διαχειρίσου τις ρυθμίσεις ημερομηνίας και ώρας Comment[es]=Administrar la configuración de fecha y hora Comment[es_AR]=Administrar la configuración de fecha y hora Comment[es_CL]=Administrar la configuración de fecha y hora Comment[es_CO]=Administrar la configuración de fecha y hora Comment[es_CR]=Administrar la configuración de fecha y hora Comment[es_DO]=Administrar la configuración de fecha y hora Comment[es_EC]=Administrar la configuración de fecha y hora Comment[es_ES]=Administrar la configuración de fecha y hora Comment[es_MX]=Administrar la configuración de fecha y hora Comment[es_NI]=Administrar la configuración de fecha y hora Comment[es_PA]=Administrar la configuración de fecha y hora Comment[es_PE]=Administrar la configuración de fecha y hora Comment[es_PR]=Administrar la configuración de fecha y hora Comment[es_SV]=Administrar la configuración de fecha y hora Comment[es_UY]=Administrar la configuración de fecha y hora Comment[es_VE]=Administrar la configuración de fecha y hora Comment[eu]=Kudeatu data eta orduaren ezarpenak Comment[fa]=مدیریت تنظیمات تاریخ و زمان Comment[fa_AF]=مدیریت تنظیمات تاریخ و زمان Comment[fa_IR]=مدیریت تنظیمات تاریخ و زمان Comment[fi]=Muuta päivä- ja aika-asetuksia Comment[fi_FI]=Muuta päivä- ja aika-asetuksia Comment[fr]=Gérer les paramètres de date et d'heure Comment[fr_CA]=Gérer les paramètres de date et d'heure Comment[fr_FR]=Gérer les paramètres de date et d'heure Comment[gd]=Stiùirich roghainnean a' chinn-là 's an ama Comment[gl]=Administrar a configuración de data e hora Comment[gl_ES]=Administrar a configuración de data e hora Comment[hr]=Upravljajte postavkama datuma i vremena Comment[hu]=Dátum és idő beállítások kezelése Comment[hu_HU]=Dátum és idő beállítások kezelése Comment[ia]=Administrar preferentias de data e tempore Comment[id]=Atur pengaturan tanggal dan waktu Comment[id_ID]=Atur pengaturan tanggal dan waktu Comment[is]=Sýsla með stillingar fyrir dagsetningu og tíma Comment[it]=Impostazioni data e ora Comment[it_CH]=Impostazioni data e ora Comment[it_IT]=Impostazioni data e ora Comment[ja]=日付時間の変更 Comment[ja_JP]=日付時間の変更 Comment[kab]=Sefrek iɣewwaṛen n wazemz akked wakud Comment[ko]=날짜 및 시간 설정 관리 Comment[ko_KR]=날짜 및 시간 설정 관리 Comment[lo]=ຈັດການການຕັ້ງຄ່າວັນແລະເວລາ Comment[lo_LA]=ຈັດການການຕັ້ງຄ່າວັນແລະເວລາ Comment[lt]=Keisti datos ir laiko nustatymus Comment[lt_LT]=Keisti datos ir laiko nustatymus Comment[lv]=Pārvaldīt datuma un laika iestatījumus Comment[lv_LV]=Pārvaldīt datuma un laika iestatījumus Comment[ms]=Mengurus tetapan tarikh dan masa Comment[ms_MY]=Mengurus tetapan tarikh dan masa Comment[nb]=Behandle innstillinger for dato og tid Comment[nb_NO]=Behandle innstillinger for dato og tid Comment[nds]=Datums- und Zeiteinstellung bearbeiten Comment[nl]=Instellingen voor datum en tijd beheren Comment[nl_NL]=Instellingen voor datum en tijd beheren Comment[oc]=Gerir los paramètres de data e d'ora Comment[pl]=Zarządzaj ustawieniami daty i czasu Comment[pl_PL]=Zarządzaj ustawieniami daty i czasu Comment[pt]=Gerir as definições de data e hora Comment[pt_BR]=Gerenciar configurações de data e hora Comment[pt_PT]=Gerir as definições de data e hora Comment[ro]=Gestionează setările datei și orei Comment[ro_RO]=Gestionează setările datei și orei Comment[ru]=Настройки даты и времени Comment[sc]=Manìgia data e sèberos de oràriu Comment[sk]=Spravovať nastavenia dátumu a času Comment[sk_SK]=Spravovať nastavenia dátumu a času Comment[sl]=Upravljajte z nastavitvami datuma in časa Comment[sl_SI]=Upravljajte z nastavitvami datuma in časa Comment[sq]=Menaxho parametrat e datës dhe orës Comment[sr]=Управљање поставкама датума и времена Comment[sr@Latn]=Управљање поставкама датума и времена Comment[sr@ije]=Управљање поставкама датума и времена Comment[sr@ijekavianlatin]=Управљање поставкама датума и времена Comment[sr@latin]=Управљање поставкама датума и времена Comment[sr_RS]=Управљање поставкама датума и времена Comment[sr_RS@latin]=Управљање поставкама датума и времена Comment[sv]=Hantera datum och tidsinställningar Comment[tg]=Идоракунии танзимоти вақт ва сана Comment[th]=จัดการการตั้งค่าวันและเวลา Comment[th_TH]=จัดการการตั้งค่าวันและเวลา Comment[tr]=Tarih ve zaman ayarlarını yönet Comment[tr_TR]=Tarih ve zaman ayarlarını yönet Comment[uk]=Керування налаштуваннями дати та часу Comment[uk_UA]=Керування налаштуваннями дати та часу Comment[ur]=وقت اور تاریخ کی ترتیبات کا انتظام کریں Comment[uz]=Сана ва вақт созламаларини бошқариш Comment[uz@cyrillic]=Сана ва вақт созламаларини бошқариш Comment[vi]=Quản lý thiết đặt ngày tháng Comment[vi_VN]=Quản lý thiết đặt ngày tháng Comment[zh_CN]=管理时间/日期设置 Comment[zh_HK]=管理日期與時間設定 Comment[zh_TW]=管理日期與時間設定 Keywords=time;date;calendar;format;network;sync; Keywords[am]=ሰአት : ቀን : ቀን መቁጠሪያ : አቀራረብ : ኔትዎርክ : ማስማሚያ; Keywords[ar]=الوقت، التاريخ، نمط، شبكة، مزامنة; Keywords[ast]=tiempu;hora;data;calendariu;calandariu;formatu;rede;sincronizar;sincronización; Keywords[be]=час;дата;каляндар;фармат;сетка;сінхранізацыя; Keywords[be@latin]=час;дата;каляндар;фармат;сетка;сінхранізацыя; Keywords[be_BY]=час;дата;каляндар;фармат;сетка;сінхранізацыя; Keywords[bg]=време;дата;календар;формат;мрежа;синхронизиране; Keywords[bg_BG]=време;дата;календар;формат;мрежа;синхронизиране; Keywords[bs]=vrijeme;datum;kalendar;format;mreža;sinhronizacija; Keywords[ca]=hora;data;calendari;format;xarxa;sincronització; Keywords[ca@valencia]=hora;data;calendari;format;xarxa;sincronització; Keywords[ca_ES]=hora;data;calendari;format;xarxa;sincronització; Keywords[ca_ES@valencia]=hora;data;calendari;format;xarxa;sincronització; Keywords[cs]=čas;datum;kalendář;formát;sítě;synchronizace; Keywords[cs_CZ]=čas;datum;kalendář;formát;sítě;synchronizace; Keywords[cy]=amser;dyddiad;calendr;fformat;rhwydwaith;cydweddu; Keywords[da]=tid;dato;kalender;format;netværk;synkronisering; Keywords[da_DK]=tid;dato;kalender;format;netværk;synkronisering; Keywords[de]=Zeit;Datum;Kalender;Format;Netzwerk;Synchronisierung; Keywords[de_CH]=Zeit;Datum;Kalender;Format;Netzwerk;Synchronisierung; Keywords[de_DE]=Zeit;Datum;Kalender;Format;Netzwerk;Synchronisierung; Keywords[el]=ώρα;ημερομηνία;ημερολόγιο;μορφοποίηση;δίκτυο;συγχρονισμός; Keywords[es]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_AR]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_CL]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_CO]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_CR]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_DO]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_EC]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_ES]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_MX]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_NI]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_PA]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_PE]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_PR]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_SV]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_UY]=hora;fecha;calendario;formato;red;sincronización; Keywords[es_VE]=hora;fecha;calendario;formato;red;sincronización; Keywords[eu]=ordua;data;egutegia;formatua;sarea;sinkronizazioa; Keywords[fa]=زمان، تاریخ، تقویم، فرمت، شبکه، هم‌زمانی; Keywords[fa_AF]=زمان، تاریخ، تقویم، فرمت، شبکه، هم‌زمانی; Keywords[fa_IR]=زمان، تاریخ، تقویم، فرمت، شبکه، هم‌زمانی; Keywords[fi]=aika;päiväys;kalenteri;formaatti;verkko;synkronointi; Keywords[fi_FI]=aika;päiväys;kalenteri;formaatti;verkko;synkronointi; Keywords[fr]=heure;date;calendrier;format;réseau;synchronisation; Keywords[fr_CA]=heure;date;calendrier;format;réseau;synchronisation; Keywords[fr_FR]=heure;date;calendrier;format;réseau;synchronisation; Keywords[fy]=tiid;datum;kalinder;opset;netwurk;syngronisaasje; Keywords[ga]=am;dáta;féilire;formáid;líonra;sync; Keywords[gd]=àm;tìm;ceann-là;mìosachan;fòrmat;lìonra;sioncronachadh;tìm;ceann-latha;mìosachan;fòrmat;lìonra;sionc; Keywords[gl]=hora;data;calendario;formato;rede;sincronización; Keywords[gl_ES]=hora;data;calendario;formato;rede;sincronización; Keywords[he]=זמן;תאריך;לוח שנה;פורמט;רשת;סנכרון; Keywords[he_IL]=זמן;תאריך;לוח שנה;פורמט;רשת;סנכרון; Keywords[hr]=vrijeme;datum;kalendar;format;mreža;usklađivanje; Keywords[hu]=idő;dátum;naptár;formátum;hálózat;szinkronizálás; Keywords[hu_HU]=idő;dátum;naptár;formátum;hálózat;szinkronizálás; Keywords[ia]=tempore;data;calendario;formato;rete;synchronisation; Keywords[id]=waktu;tanggal;kalender;format;jaringan;cocokkan; Keywords[id_ID]=waktu;tanggal;kalender;format;jaringan;cocokkan; Keywords[is]=tími;dagsetning;cdagatal;snið;netkerfi;samstilling; Keywords[it]=ora;data;calendario;formato;rete;sync; Keywords[it_CH]=ora;data;calendario;formato;rete;sync; Keywords[it_IT]=ora;data;calendario;formato;rete;sync; Keywords[ja]=時間、日付、カレンダー、フォーマット、ネットワーク、同期; Keywords[ja_JP]=時間、日付、カレンダー、フォーマット、ネットワーク、同期; Keywords[kab]=akud;azemz;awiyat;amasal;aẓeṭṭa;amtawi; Keywords[ko]=시간;날짜;달력;형식;네트워크;동기화; Keywords[ko_KR]=시간;날짜;달력;형식;네트워크;동기화; Keywords[lo]=ເວລາ;ວັນ;ປະຕິທິນ;ຮູບແບບ;ເຄືອຂ່າຍ;ຊິງຄ໌; Keywords[lo_LA]=ເວລາ;ວັນ;ປະຕິທິນ;ຮູບແບບ;ເຄືອຂ່າຍ;ຊິງຄ໌; Keywords[lt]=laikas;data;kalendorius;formatas;tinklas;sinchronizacija; Keywords[lt_LT]=laikas;data;kalendorius;formatas;tinklas;sinchronizacija; Keywords[lv]=laiks;datums;kalendārs;formāts;tīkls;sinhronizācija; Keywords[lv_LV]=laiks;datums;kalendārs;formāts;tīkls;sinhronizācija; Keywords[ms]=masa;tarikh;kalendar;format;rangkaian;segerak; Keywords[ms_MY]=masa;tarikh;kalendar;format;rangkaian;segerak; Keywords[nb]=tid;dato;kalender;format;nettverk;synkroniser; Keywords[nb_NO]=tid;dato;kalender;format;nettverk;synkroniser; Keywords[nds]=Zeit;Datum;Kalender;Format;Netzwerk;Synchronisation; Keywords[nl]=tijd;datum;kalender;bestandtype;netwerk;synchroniseren; Keywords[nl_NL]=tijd;datum;kalender;bestandtype;netwerk;synchroniseren; Keywords[pa]=ਸਮਾਂ;ਮਿਤੀ;ਕਲੈੰਡਰ;ਸਵਰੂਪ;ਨੈੱਟਵਰਕ;sync; Keywords[pl]=czas;data;kalendarz;format;sieć;synchronizacja; Keywords[pl_PL]=czas;data;kalendarz;format;sieć;synchronizacja; Keywords[pt]=hora;data;calendário;formato;rede;sincronização; Keywords[pt_BR]=hora;data;calendário;formato;rede;sincronização; Keywords[pt_PT]=hora;data;calendário;formato;rede;sincronização; Keywords[ro]=timp;dată;calendar;format;rețea;sincronizare; Keywords[ro_RO]=timp;dată;calendar;format;rețea;sincronizare; Keywords[ru]=время;дата;календарь;формат;сеть;синхронизация; Keywords[sc]=oràriu;data;calendàriu;formatu;retza;sinc; Keywords[sk]=čas;dátum;kalendár;formát;siete;synchorizácia; Keywords[sk_SK]=čas;dátum;kalendár;formát;siete;synchorizácia; Keywords[sl]=čas;datum;koledar;oblika;omrežje;usklajevanje; Keywords[sl_SI]=čas;datum;koledar;oblika;omrežje;usklajevanje; Keywords[sq]=ora;data;kalendari;formati;rrjeti;sinkronizo; Keywords[sr]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr@Latn]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr@ije]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr@ijekavianlatin]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr@latin]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr_RS]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sr_RS@latin]=време;датум;календар;формат;мрежа;усклађивање; Keywords[sv]=tid;datum;kalender;format;nätverk;synkronisering; Keywords[ta]=நேரம்;தேதி;நாட்காட்டி;வடிவம்;பிணையம்;ஒத்திசைவு; Keywords[ta_LK]=நேரம்;தேதி;நாட்காட்டி;வடிவம்;பிணையம்;ஒத்திசைவு; Keywords[tg]=вақт;сана;тақвим;формат;шабака;ҳамоҳангсозӣ; Keywords[th]=เวลา;วัน;ปฏิทิน;รูปแบบ;เครือข่าย;การโอนข้อมูล; Keywords[th_TH]=เวลา;วัน;ปฏิทิน;รูปแบบ;เครือข่าย;การโอนข้อมูล; Keywords[tr]=zaman;tarih;takvim;biçim;ağ;eşitleme; Keywords[tr_TR]=zaman;tarih;takvim;biçim;ağ;eşitleme; Keywords[uk]=час;дата;календар;формат;мережа;синхронізація; Keywords[uk_UA]=час;дата;календар;формат;мережа;синхронізація; Keywords[ur]=وقت، تاریخ، تقویم، ساخت، نیٹورک، سنک، کالینڈر، فارمیٹ; Keywords[uz]=вақт;сана;календар;формат;тармоқ;sync; Keywords[uz@cyrillic]=вақт;сана;календар;формат;тармоқ;sync; Keywords[vi]=thời gian;ngày tháng;lịch;định dạng;mạng;đồng bộ; Keywords[vi_VN]=thời gian;ngày tháng;lịch;định dạng;mạng;đồng bộ; Keywords[zh_CN]=time;date;calendar;format;network;sync;时间;日期;日历;日程;格式;网络;同步; Keywords[zh_HK]=時間;日期;日曆;格式;網絡;同步; Keywords[zh_TW]=時間;日期;行事曆;格式;網路;同步; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-panel.desktop0000664000175000017500000004150013215735076026061 0ustar fabiofabio[Desktop Entry] Icon=cs-panel Exec=cinnamon-settings panel Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Panel Name[af]=Paneel Name[am]=ክፍል Name[ar]=الشريط Name[be]=Панэль Name[be@latin]=Панэль Name[be_BY]=Панэль Name[bg]=Панел Name[bg_BG]=Панел Name[bn]=প্যানেল Name[bn_IN]=প্যানেল Name[ca]=Tauler Name[ca@valencia]=Panell Name[ca_ES]=Tauler Name[ca_ES@valencia]=Panell Name[de]=Leiste Name[de_CH]=Leiste Name[de_DE]=Leiste Name[el]=Γραμμή εργασιών Name[eo]=Panelo Name[et]=Paneel Name[et_EE]=Paneel Name[eu]=Panela Name[fa]=صفحه‌ی‌ کنترل Name[fa_AF]=صفحه‌ی‌ کنترل Name[fa_IR]=صفحه‌ی‌ کنترل Name[fi]=Paneeli Name[fi_FI]=Paneeli Name[fr]=Tableau de bord Name[fr_CA]=Tableau de bord Name[fr_FR]=Tableau de bord Name[ga]=Painéal Name[gd]=Panail Name[he]=פאנל Name[he_IL]=פאנל Name[hi]=पट्टिका Name[ia]=Pannello Name[is]=Skjástika Name[it]=Pannello Name[it_CH]=Pannello Name[it_IT]=Pannello Name[ja]=パネル Name[ja_JP]=パネル Name[km]=បន្ទះ Name[km_KH]=បន្ទះ Name[ko]=패널 Name[ko_KR]=패널 Name[li]=Paneel Name[lt]=Skydelis Name[lt_LT]=Skydelis Name[lv]=Panelis Name[lv_LV]=Panelis Name[ml]=പാളി Name[mr]=पटल Name[nb]=Oppgavelinje Name[nb_NO]=Oppgavelinje Name[nds]=Leiste Name[ne]=प्यानल Name[nl]=Paneel Name[nl_NL]=Paneel Name[oc]=Tablèu de bòrd Name[om]=Moggaargii Name[pa]=ਪੈਨਲ Name[pt]=Painel Name[pt_BR]=Painel Name[pt_PT]=Painel Name[ro]=Panou Name[ro_RO]=Panou Name[ru]=Панель Name[rue]=Панель Name[si]=පැනලය Name[sl]=Pult Name[sl_SI]=Pult Name[so]=Baanelka Name[sq]=Paneli Name[sr]=Полица Name[sr@Latn]=Tabla Name[sr@ije]=Полица Name[sr@ijekavianlatin]=Полица Name[sr@latin]=Tabla Name[sr_RS]=Полица Name[sr_RS@latin]=Tabla Name[ta]=பலகை Name[ta_LK]=பலகை Name[te]=ప్యానల్ Name[tg]=Лавҳа Name[th]=แผง Name[th_TH]=แผง Name[ts]=Phenele Name[uk]=Панель Name[uk_UA]=Панель Name[ur]=پینل Name[uz]=Панел Name[uz@cyrillic]=Панел Name[vi]=Bảng Name[vi_VN]=Bảng Name[zh_CN]=面板 Name[zh_HK]=面板 Name[zh_TW]=面板 Comment=Manage Cinnamon panel settings Comment[am]=የሲናሞን ክፍል ማሰናጃዎች አስተዳዳሪ Comment[ar]=إدارة خصائص شريط سينامُن Comment[ast]=Axustes del alministrador del panel Cinnamon Comment[be]=Кіраванне наладамі панэлі Cinnamon Comment[be@latin]=Кіраванне наладамі панэлі Cinnamon Comment[be_BY]=Кіраванне наладамі панэлі Cinnamon Comment[bg]=Управление на панела на Cinnamon Comment[bg_BG]=Управление на панела на Cinnamon Comment[bs]=Upravljanje Cinnamon ploča Comment[ca]=Gestioneu els ajusts del tauler de Cinnamon Comment[ca@valencia]=Administra la configuració del panell de Cinnamon Comment[ca_ES]=Gestioneu els ajusts del tauler de Cinnamon Comment[ca_ES@valencia]=Administra la configuració del panell de Cinnamon Comment[cs]=Správa Cinnamon panelu Comment[cs_CZ]=Správa Cinnamon panelu Comment[cy]=Rheoli gosodiadau panel Cinnamon Comment[da]=Administrér Cinnamon-panelindstillinger Comment[da_DK]=Administrér Cinnamon-panelindstillinger Comment[de]=Cinnamons Leisteneinstellungen verwalten Comment[de_CH]=Cinnamons Leisteneinstellungen verwalten Comment[de_DE]=Cinnamons Leisteneinstellungen verwalten Comment[el]=Διαχείριση ρυθμίσεων γραμμής εργασιών Cinnamon Comment[es]=Administrar configuración del panel de Cinnamon Comment[es_AR]=Administrar configuración del panel de Cinnamon Comment[es_CL]=Administrar configuración del panel de Cinnamon Comment[es_CO]=Administrar configuración del panel de Cinnamon Comment[es_CR]=Administrar configuración del panel de Cinnamon Comment[es_DO]=Administrar configuración del panel de Cinnamon Comment[es_EC]=Administrar configuración del panel de Cinnamon Comment[es_ES]=Administrar configuración del panel de Cinnamon Comment[es_MX]=Administrar configuración del panel de Cinnamon Comment[es_NI]=Administrar configuración del panel de Cinnamon Comment[es_PA]=Administrar configuración del panel de Cinnamon Comment[es_PE]=Administrar configuración del panel de Cinnamon Comment[es_PR]=Administrar configuración del panel de Cinnamon Comment[es_SV]=Administrar configuración del panel de Cinnamon Comment[es_UY]=Administrar configuración del panel de Cinnamon Comment[es_VE]=Administrar configuración del panel de Cinnamon Comment[eu]=Kudeatu Cinnamon panel-ezarpenak Comment[fi]=Muokkaa Cinnamonin paneelin asetuksia Comment[fi_FI]=Muokkaa Cinnamonin paneelin asetuksia Comment[fr]=Gérer les paramètres du tableau de bord de Cinnamon Comment[fr_CA]=Gérer les paramètres du tableau de bord de Cinnamon Comment[fr_FR]=Gérer les paramètres du tableau de bord de Cinnamon Comment[gd]=Stiùirich na roghainnean panail aig Cinnamon Comment[gl]=Administra os axustes do panel de Cinnamon Comment[gl_ES]=Administra os axustes do panel de Cinnamon Comment[hr]=Upravljajte postavkama Cinnamon panela Comment[hu]=Cinnamon panel beállítások Comment[hu_HU]=Cinnamon panel beállítások Comment[ia]=Gerer le configuration del pannello de Cinnamon Comment[id]=Atur pengaturan panel Cinnamon Comment[id_ID]=Atur pengaturan panel Cinnamon Comment[is]=Sýsla með stillingar Cinnamon skjástika Comment[it]=Gestisci impostazioni del pannello Cinnamon Comment[it_CH]=Gestisci impostazioni del pannello Cinnamon Comment[it_IT]=Gestisci impostazioni del pannello Cinnamon Comment[ja]=Cinnamon パネル設定管理 Comment[ja_JP]=Cinnamon パネル設定管理 Comment[ko]=시나몬 패널설정 관리 Comment[ko_KR]=시나몬 패널설정 관리 Comment[lt]=Tvarkyti Cinnamon skydelio nustatymus Comment[lt_LT]=Tvarkyti Cinnamon skydelio nustatymus Comment[lv]=Pārvaldīt Cinnamon paneļa iestatījumus Comment[lv_LV]=Pārvaldīt Cinnamon paneļa iestatījumus Comment[ms]=Mengurus tetapan panel Cinnamon Comment[ms_MY]=Mengurus tetapan panel Cinnamon Comment[nb]=Håndter innstillinger for oppgavelinjen i Cinnamon Comment[nb_NO]=Håndter innstillinger for oppgavelinjen i Cinnamon Comment[nds]=Cinnamon Panel-Einstellungen verwalten Comment[nl]=Instellingen van Cinnamonwerkbalk beheren Comment[nl_NL]=Instellingen van Cinnamonwerkbalk beheren Comment[pl]=Zarządzaj ustawieniami panelu Cinnamona Comment[pl_PL]=Zarządzaj ustawieniami panelu Cinnamona Comment[pt]=Gerir as definições do painel do Cinnamon Comment[pt_BR]=Gerenciar as configurações do painel do Cinnamon Comment[pt_PT]=Gerir as definições do painel do Cinnamon Comment[ro]=Gestionează setările panoului Cinnamon Comment[ro_RO]=Gestionează setările panoului Cinnamon Comment[ru]=Управление настройками панели Cinnamon Comment[sk]=Spravovať nastavenia panelov Cinnamon Comment[sk_SK]=Spravovať nastavenia panelov Cinnamon Comment[sl]=Upravljajte z nastavitvami pulta Cinnamona Comment[sl_SI]=Upravljajte z nastavitvami pulta Cinnamona Comment[sq]=Menaxhoni parametrat e panelit të Cinnamon Comment[sr]=Управљање поставкама полице Цимета Comment[sr@Latn]=Управљање поставкама полице Цимета Comment[sr@ije]=Управљање поставкама полице Цимета Comment[sr@ijekavianlatin]=Управљање поставкама полице Цимета Comment[sr@latin]=Управљање поставкама полице Цимета Comment[sr_RS]=Управљање поставкама полице Цимета Comment[sr_RS@latin]=Управљање поставкама полице Цимета Comment[sv]=Hantera Cinnamons panelinställningar Comment[tg]=Идоракунии танзимоти лавҳаи Cinnamon Comment[th]=จัดการการตั้งค่าแผง Cinnamon Comment[th_TH]=จัดการการตั้งค่าแผง Cinnamon Comment[tr]=Cinnamon panel ayarlarını yönet Comment[tr_TR]=Cinnamon panel ayarlarını yönet Comment[uk]=Керування налаштуваннями панелі Cinnamon Comment[uk_UA]=Керування налаштуваннями панелі Cinnamon Comment[ur]=سنامون پینل کی ترتیبات کا انتظام کریں Comment[vi]=Quản lý thiết đặt bảng Cinnamon Comment[vi_VN]=Quản lý thiết đặt bảng Cinnamon Comment[zh_CN]=管理Cinnamon面板设置 Comment[zh_HK]=管理 Cinnamon 面板設定 Comment[zh_TW]=管理 Cinnamon 面板設定 Keywords=panel;height;bottom;top;autohide;size;layout; Keywords[am]=ክፍል: እርዝመት: ከ ታች: ከ ላይ: በራሱ መደበቂያ: መጠን: እቅድ; Keywords[ar]=الشريط، والطول، أسفل، أعلى، إخفاء تلقائي والحجم والتصميم; Keywords[bg]=панел;височина;долу;горе;скриване;подредба; Keywords[bg_BG]=панел;височина;долу;горе;скриване;подредба; Keywords[ca]=tauler;alçada;inferior;superior;autoocultar;mida;disposició; Keywords[ca@valencia]=tauler;alçada;inferior;superior;autoocultar;mida;disposició; Keywords[ca_ES]=tauler;alçada;inferior;superior;autoocultar;mida;disposició; Keywords[ca_ES@valencia]=tauler;alçada;inferior;superior;autoocultar;mida;disposició; Keywords[cs]=panel;výška;spodní;horní;automatické skrytí;výška;rozvržení; Keywords[cs_CZ]=panel;výška;spodní;horní;automatické skrytí;výška;rozvržení; Keywords[cy]=panel;uchder;isaf;brig;awtoguddio;maint;cynllun; Keywords[da]=panel;højde;bund;top;skjul automatisk;størrelse;layout; Keywords[da_DK]=panel;højde;bund;top;skjul automatisk;størrelse;layout; Keywords[de]=Leiste;Paneel;Höhe;Untern;Oben;automatisch verbergen;automatisch verstecken;Größe;Ansicht;Anordnung;Layout; Keywords[de_CH]=Leiste;Paneel;Höhe;Untern;Oben;automatisch verbergen;automatisch verstecken;Größe;Ansicht;Anordnung;Layout; Keywords[de_DE]=Leiste;Paneel;Höhe;Untern;Oben;automatisch verbergen;automatisch verstecken;Größe;Ansicht;Anordnung;Layout; Keywords[el]=Γραμμή εργαλείων;ύψος;κάτω;πάνω;αυτόματη απόκρυψη;μέγεθος;διάταξη; Keywords[es]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_AR]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_CL]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_CO]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_CR]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_DO]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_EC]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_ES]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_MX]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_NI]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_PA]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_PE]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_PR]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_SV]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_UY]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[es_VE]=panel;altura;inferior;superior;autoocultar;tamaño;disposición; Keywords[eu]=panela;altuera;behea;goia;ezkutatu automatikoki;tamaina;diseinua; Keywords[fi]=paneeli;korkeus;pohja;yläosa;automaattinen piilotus;koko;asettelu; Keywords[fi_FI]=paneeli;korkeus;pohja;yläosa;automaattinen piilotus;koko;asettelu; Keywords[fr]=tableau de bord;hauteur;bas;haut;masquer;taille;disposition; Keywords[fr_CA]=tableau de bord;hauteur;bas;haut;masquer;tailler;disposition; Keywords[fr_FR]=tableau de bord;hauteur;bas;haut;masquer;taille;disposition; Keywords[gd]=panel;height;bottom;top;autohide;size;layout;panail;àirde;bonn;barr;falach;meud;co-dhealbhachd; Keywords[gl]=panel;altura;inferior;superior;autoagochar;tamaño;disposición; Keywords[gl_ES]=panel;altura;inferior;superior;autoagochar;tamaño;disposición; Keywords[hr]=panel;visina;dno;vrh;automatsko sakrivanje;veličina;raspored; Keywords[hu]=panel;magasság;lent;fent;automatikus elrejtés;méret;hagyományos;elrendezés; Keywords[hu_HU]=panel;magasság;lent;fent;automatikus elrejtés;méret;hagyományos;elrendezés; Keywords[ia]=pannello;altessa;pede;summitate;auto occultar;dimension;disposition; Keywords[is]=spjald;stika;hæð;neðst;efst;sjálfvirk felun;stærð;hefðbundið;framsetning;útlit; Keywords[it]=pannello;altezza;fondo;cima;nascondi automaticamente;dimensione;disposizione; Keywords[it_CH]=pannello;altezza;fondo;cima;nascondi automaticamente;dimensione;disposizione; Keywords[it_IT]=pannello;altezza;fondo;cima;nascondi automaticamente;dimensione;disposizione; Keywords[ko]=패널;높이;아래;위;자동 숨김;크기;레이아웃; Keywords[ko_KR]=패널;높이;아래;위;자동 숨김;크기;레이아웃; Keywords[lt]=skydelis;aukštis;apačia;viršus;automatiškai slėpti;dydis;išdėstymas; Keywords[lt_LT]=skydelis;aukštis;apačia;viršus;automatiškai slėpti;dydis;išdėstymas; Keywords[ms]=panel;tinggi;bawah;atas;auto sembunyi;saiz;susun atur; Keywords[ms_MY]=panel;tinggi;bawah;atas;auto sembunyi;saiz;susun atur; Keywords[nb]=oppgavelinje;høyde;bunn;topp;skjul automatisk;størrelse;utforming; Keywords[nb_NO]=oppgavelinje;høyde;bunn;topp;skjul automatisk;størrelse;utforming; Keywords[nds]=Fenster;Höhe;Unten;Oben;automatisch ausblenden;Größe;Layout; Keywords[nl]=werkbalk;hoogte;onderaan;bovenaan;automatisch verbergen;grootte;vormgeving; Keywords[nl_NL]=werkbalk;hoogte;onderaan;bovenaan;automatisch verbergen;grootte;vormgeving; Keywords[pl]=panel;wysokość;przycisk;góra;automatyczne ukrywanie;rozmiar;układ; Keywords[pl_PL]=panel;wysokość;przycisk;góra;automatyczne ukrywanie;rozmiar;układ; Keywords[pt]=painel;altura;fundo;superior;esconder automático;tamanho;layout; Keywords[pt_BR]=painel;altura;fundo;superior;auto esconder;tamanho;layout; Keywords[pt_PT]=painel;altura;fundo;superior;esconder automático;tamanho;layout; Keywords[ro]=panou;înălțime;jos;sus;ascundere automată;dimensiune;aranjament; Keywords[ro_RO]=panou;înălțime;jos;sus;ascundere automată;dimensiune;aranjament; Keywords[ru]=панель;высота;внизу;вверху;автоскрытие;размер;слой; Keywords[sk]=panel;výška;spodok;vrch;automatické skrývanie;veľkosť;rozloženie; Keywords[sk_SK]=panel;výška;spodok;vrch;automatické skrývanie;veľkosť;rozloženie; Keywords[sq]=paneli;lartësia;poshtë;lart;vetë-fshih;përmasat;faqosja; Keywords[sr]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr@Latn]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr@ije]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr@ijekavianlatin]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr@latin]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr_RS]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sr_RS@latin]=полица;висина;доле;горе;самоскривање;величина;распоред; Keywords[sv]=panel;höjd;nederkant;överkant;dölj automatiskt;storlek;upplägg; Keywords[th]=พาเนล;ความสูง;ข้างล่าง;ข้างบน;ซ่อนอัตโนมัติ;ขนาด;แผนผัง; Keywords[th_TH]=พาเนล;ความสูง;ข้างล่าง;ข้างบน;ซ่อนอัตโนมัติ;ขนาด;แผนผัง; Keywords[tr]=panel;yükseklik;alt;üst;otomatik;gizle;boyut;düzen; Keywords[tr_TR]=panel;yükseklik;alt;üst;otomatik;gizle;boyut;düzen; Keywords[uk]=Панель;висота;знизу;вгорі;самочинне приховування;розмір;розташування; Keywords[uk_UA]=Панель;висота;знизу;вгорі;самочинне приховування;розмір;розташування; Keywords[ur]=پینل، اونچائی، نیچے، اوپر، چھپائیں، سائز، حجم، خاکہ; Keywords[vi]=bảng;chiều cao;đáy;đỉnh;tự động ẩn;kích thước;bố trí; Keywords[vi_VN]=bảng;chiều cao;đáy;đỉnh;tự động ẩn;kích thước;bố trí; Keywords[zh_CN]=面板,高度,底部,顶部,自动隐藏,大小,布局; Keywords[zh_HK]=面板;高度;底部;頂部;自動隱藏;大小;佈局; Keywords[zh_TW]=面板;高度;底端;頂端;自動隱藏;尺寸;配置; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-desktop.desktop0000664000175000017500000004034313215735076026437 0ustar fabiofabio[Desktop Entry] Icon=cs-desktop Exec=cinnamon-settings desktop Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Desktop Name[am]=ዴስክቶፕ Name[ar]=سطح المكتب Name[ast]=Escritoriu Name[az]=Masaüstü Name[az_AZ]=Masaüstü Name[be]=Працоўны стол Name[be@latin]=Працоўны стол Name[be_BY]=Працоўны стол Name[bg]=Работен плот Name[bg_BG]=Работен плот Name[ca]=Escriptori Name[ca@valencia]=Escriptori Name[ca_ES]=Escriptori Name[ca_ES@valencia]=Escriptori Name[cs]=Pracovní plocha Name[cs_CZ]=Pracovní plocha Name[cy]=Bwrdd Gwaith Name[da]=Skrivebord Name[da_DK]=Skrivebord Name[de]=Schreibtisch Name[de_CH]=Schreibtisch Name[de_DE]=Schreibtisch Name[el]=Επιφάνεια εργασίας Name[eo]=Labortablo Name[es]=Escritorio Name[es_AR]=Escritorio Name[es_CL]=Escritorio Name[es_CO]=Escritorio Name[es_CR]=Escritorio Name[es_DO]=Escritorio Name[es_EC]=Escritorio Name[es_ES]=Escritorio Name[es_MX]=Escritorio Name[es_NI]=Escritorio Name[es_PA]=Escritorio Name[es_PE]=Escritorio Name[es_PR]=Escritorio Name[es_SV]=Escritorio Name[es_UY]=Escritorio Name[es_VE]=Escritorio Name[et]=Töölaud Name[et_EE]=Töölaud Name[eu]=Mahaigaina Name[fa]=دسکتاپ Name[fa_AF]=دسکتاپ Name[fa_IR]=دسکتاپ Name[fi]=Työpöytä Name[fi_FI]=Työpöytä Name[fil]=Pook ng Likha Name[fr]=Bureau Name[fr_CA]=Bureau Name[fr_FR]=Bureau Name[ga]=Deasc Name[gl]=Escritorio Name[gl_ES]=Escritorio Name[hr]=Radna površina Name[hu]=Asztal Name[hu_HU]=Asztal Name[ia]=Scriptorio Name[is]=Skjáborð Name[ja]=デスクトップ Name[ja_JP]=デスクトップ Name[kab]=Tanarit Name[ko]=바탕화면 Name[ko_KR]=바탕화면 Name[lo]=ພື້ນທີ່ໜ້າຈໍ Name[lo_LA]=ພື້ນທີ່ໜ້າຈໍ Name[lt]=Darbalaukis Name[lt_LT]=Darbalaukis Name[lv]=Darbvirsma Name[lv_LV]=Darbvirsma Name[nb]=Skrivebord Name[nb_NO]=Skrivebord Name[nl]=Bureaublad Name[nl_NL]=Bureaublad Name[oc]=Burèu Name[pa]=ਡੈਸਕਟਾਪ Name[pl]=Pulpit Name[pl_PL]=Pulpit Name[pt]=Ambiente de trabalho Name[pt_BR]=Área de Trabalho Name[pt_PT]=Ambiente de trabalho Name[ru]=Рабочий стол Name[sk]=Pracovná plocha Name[sk_SK]=Pracovná plocha Name[sl]=Namizje Name[sl_SI]=Namizje Name[sq]=Desktopi Name[sr]=Радна површ Name[sr@Latn]=Радна површ Name[sr@ije]=Радна површ Name[sr@ijekavianlatin]=Радна површ Name[sr@latin]=Радна површ Name[sr_RS]=Радна површ Name[sr_RS@latin]=Радна површ Name[sv]=Skrivbord Name[ta]=பணிமேடை Name[ta_LK]=பணிமேடை Name[tg]=Мизи корӣ Name[th]=พื้นโต๊ะ Name[th_TH]=พื้นโต๊ะ Name[tl]=Pook ng likha Name[tr]=Masaüstü Name[tr_TR]=Masaüstü Name[uk]=Стільниця Name[uk_UA]=Стільниця Name[ur]=ڈیسک ٹاپ Name[vi]=Màn hình làm việc Name[vi_VN]=Màn hình làm việc Name[zh_CN]=桌面 Name[zh_HK]=桌面 Name[zh_TW]=桌面 Comment=Manage your desktop icons Comment[am]=የ ዴስክቶፕ ምልክቶች አስተዳዳሪ Comment[ar]=إدارة أيقونات سطح المكتب Comment[az]=Masaüstü piktoqramlarını idarə edin Comment[az_AZ]=Masaüstü piktoqramlarını idarə edin Comment[be]=Наладзіць значкі на працоўным стале Comment[be@latin]=Наладзіць значкі на працоўным стале Comment[be_BY]=Наладзіць значкі на працоўным стале Comment[bg]=Управлявайте Вашите иконки на работния плот Comment[bg_BG]=Управлявайте Вашите иконки на работния плот Comment[bs]=Upravljajte vašim desktop ikonama Comment[ca]=Gestioneu les vostres icones d'escriptori Comment[ca@valencia]=Administrar icones de l'escriptori Comment[ca_ES]=Gestioneu les vostres icones d'escriptori Comment[ca_ES@valencia]=Administrar icones de l'escriptori Comment[cs]=Správa ikon na ploše Comment[cs_CZ]=Správa ikon na ploše Comment[cy]=Rheolwch eiconau'ch bwrdd gwaith Comment[da]=Administrér dine skrivebordsikoner Comment[da_DK]=Administrér dine skrivebordsikoner Comment[de]=Schreibtischsymbole verwalten Comment[de_CH]=Schreibtischsymbole verwalten Comment[de_DE]=Schreibtischsymbole verwalten Comment[el]=Διαχείριση εικονιδίων επιφάνειας εργασίας Comment[es]=Administrar iconos del escritorio Comment[es_AR]=Administrar iconos del escritorio Comment[es_CL]=Administrar iconos del escritorio Comment[es_CO]=Administrar iconos del escritorio Comment[es_CR]=Administrar iconos del escritorio Comment[es_DO]=Administrar iconos del escritorio Comment[es_EC]=Administrar iconos del escritorio Comment[es_ES]=Administrar iconos del escritorio Comment[es_MX]=Administrar iconos del escritorio Comment[es_NI]=Administrar iconos del escritorio Comment[es_PA]=Administrar iconos del escritorio Comment[es_PE]=Administrar iconos del escritorio Comment[es_PR]=Administrar iconos del escritorio Comment[es_SV]=Administrar iconos del escritorio Comment[es_UY]=Administrar iconos del escritorio Comment[es_VE]=Administrar iconos del escritorio Comment[eu]=Kudeatu mahaigaineko ikonoak Comment[fa]=آیکن‌های دسکتاپ‌تان را مدیریت کنید Comment[fa_AF]=آیکن‌های دسکتاپ‌تان را مدیریت کنید Comment[fa_IR]=آیکن‌های دسکتاپ‌تان را مدیریت کنید Comment[fi]=Hallitse työpöydän kuvakkeita Comment[fi_FI]=Hallitse työpöydän kuvakkeita Comment[fr]=Gérez vos icones de bureaux Comment[fr_CA]=Gérer vos icônes du bureau Comment[fr_FR]=Gérez vos icones de bureaux Comment[gd]=Stiùirich ìomhaigheagan an deasga agad Comment[gl]=Xestiona as iconas do escritorio Comment[gl_ES]=Xestiona as iconas do escritorio Comment[hr]=Upravljajte svojim ikonama radne površine Comment[hu]=Asztal ikonjainak kezelése Comment[hu_HU]=Asztal ikonjainak kezelése Comment[ia]=Gerer tu icones del scriptorio Comment[id]=Atur icon di desktop Comment[id_ID]=Atur icon di desktop Comment[is]=Sýsla með táknmyndir á skjáborði Comment[it]=Gestione delle icone sul desktop Comment[it_CH]=Gestione delle icone sul desktop Comment[it_IT]=Gestione delle icone sul desktop Comment[ja]=デスクトップアイコン管理 Comment[ja_JP]=デスクトップアイコン管理 Comment[kab]=Sefrek taykunin n tnarit-inek Comment[ko]=바탕화면 아이콘을 관리합니다 Comment[ko_KR]=바탕화면 아이콘을 관리합니다 Comment[lo]=ຈັດການໄອຄອນພື້ນທີ່ໜ້າຈໍຂອງເຈົ້າ Comment[lo_LA]=ຈັດການໄອຄອນພື້ນທີ່ໜ້າຈໍຂອງເຈົ້າ Comment[lt]=Tvarkyti darbalaukio piktogramas Comment[lt_LT]=Tvarkyti darbalaukio piktogramas Comment[lv]=Pārvaldīt savas darbvirsmas ikonas Comment[lv_LV]=Pārvaldīt savas darbvirsmas ikonas Comment[ms]=Mengurus ikon desktop anda Comment[ms_MY]=Mengurus ikon desktop anda Comment[nb]=Behandle skrivebordsikonene Comment[nb_NO]=Behandle skrivebordsikonene Comment[nds]=Desktopsymbole bearbeiten Comment[nl]=Uw bureaubladpictogrammen beheren Comment[nl_NL]=Uw bureaubladpictogrammen beheren Comment[oc]=Gerir las icònas de vòstre burèu Comment[pl]=Zarządzaj swoimi ikonami pulpitu Comment[pl_PL]=Zarządzaj swoimi ikonami pulpitu Comment[pt]=Gerir os seus ícones Comment[pt_BR]=Gerenciar seus ícones da área de trabalho Comment[pt_PT]=Gerir os seus ícones Comment[ro]=Gestionează pictogramele de pe desktop Comment[ro_RO]=Gestionează pictogramele de pe desktop Comment[ru]=Настроить значки на рабочем столе Comment[sk]=Spravovať vaše ikony pracovnej plochy Comment[sk_SK]=Spravovať vaše ikony pracovnej plochy Comment[sl]=Upravljajte z ikonami namizja Comment[sl_SI]=Upravljajte z ikonami namizja Comment[sq]=Menaxhoni ikonat e desktopit tuaj Comment[sr]=Управљање иконицама радне површи Comment[sr@Latn]=Управљање иконицама радне површи Comment[sr@ije]=Управљање иконицама радне површи Comment[sr@ijekavianlatin]=Управљање иконицама радне површи Comment[sr@latin]=Управљање иконицама радне површи Comment[sr_RS]=Управљање иконицама радне површи Comment[sr_RS@latin]=Управљање иконицама радне површи Comment[sv]=Hantera dina skrivbordsikoner Comment[tg]=Идоракунии нишонаҳои мизи корӣ Comment[th]=จัดการไอคอนพื้นโต๊ะของคุณ Comment[th_TH]=จัดการไอคอนพื้นโต๊ะของคุณ Comment[tr]=Masaüstü simgelerini yönet Comment[tr_TR]=Masaüstü simgelerini yönet Comment[uk]=Керування піктограмами стільниці Comment[uk_UA]=Керування піктограмами стільниці Comment[ur]=ڈیسک ٹاپ کے آئکن کا انتظام کریں Comment[vi]=Quản lý biểu tượng màn hình của bạn Comment[vi_VN]=Quản lý biểu tượng màn hình của bạn Comment[zh_CN]=管理桌面图标 Comment[zh_HK]=管理你的桌面圖示 Comment[zh_TW]=管理您的桌面圖示 Keywords=desktop;home;button;trash; Keywords[am]=ዴስክቶፕ : ቤት : ቁልፍ : ቆሻሻ; Keywords[ar]=سطح المكتب ، المنزل ، مفتاح، سله المهملات; Keywords[az]=masaüstü;ev;düymə;zibil; Keywords[az_AZ]=masaüstü;ev;düymə;zibil; Keywords[be]=працоўны стол;дамой;кнопка;смецце; Keywords[be@latin]=працоўны стол;дамой;кнопка;смецце; Keywords[be_BY]=працоўны стол;дамой;кнопка;смецце; Keywords[bg]=Работен плот;домашна папка;бутон;кошче; Keywords[bg_BG]=Работен плот;домашна папка;бутон;кошче; Keywords[bs]=desktop;naslovna;dugme;smeće; Keywords[ca]=escriptori;casa;botó;paperera; Keywords[ca@valencia]=escriptori;casa;botó;paperera; Keywords[ca_ES]=escriptori;casa;botó;paperera; Keywords[ca_ES@valencia]=escriptori;casa;botó;paperera; Keywords[cs]=plocha;domů;tlačítko;koš; Keywords[cs_CZ]=plocha;domů;tlačítko;koš; Keywords[cy]=bwrdd gwaith;cartref;botwm;sbwriel; Keywords[da]=skrivebord;hjem;knap;papirkurv; Keywords[da_DK]=skrivebord;hjem;knap;papirkurv; Keywords[de]=Arbeitsfläche;Schreibtisch;Persönlicher Ordner;Knopf;Papierkorb;Müll;desktop;home;button;trash; Keywords[de_CH]=Arbeitsfläche;Schreibtisch;Persönlicher Ordner;Knopf;Papierkorb;Müll;desktop;home;button;trash; Keywords[de_DE]=Arbeitsfläche;Schreibtisch;Persönlicher Ordner;Knopf;Papierkorb;Müll;desktop;home;button;trash; Keywords[el]=επιφάνεια εργασίας;αρχικός φάκελος;κουμπί;απορρίματα; Keywords[en_GB]=desktop;home;button;rubbish bin; Keywords[es]=escritorio;casa;botón;papelera; Keywords[es_AR]=escritorio;casa;botón;papelera; Keywords[es_CL]=escritorio;casa;botón;papelera; Keywords[es_CO]=escritorio;casa;botón;papelera; Keywords[es_CR]=escritorio;casa;botón;papelera; Keywords[es_DO]=escritorio;casa;botón;papelera; Keywords[es_EC]=escritorio;casa;botón;papelera; Keywords[es_ES]=escritorio;casa;botón;papelera; Keywords[es_MX]=escritorio;casa;botón;papelera; Keywords[es_NI]=escritorio;casa;botón;papelera; Keywords[es_PA]=escritorio;casa;botón;papelera; Keywords[es_PE]=escritorio;casa;botón;papelera; Keywords[es_PR]=escritorio;casa;botón;papelera; Keywords[es_SV]=escritorio;casa;botón;papelera; Keywords[es_UY]=escritorio;casa;botón;papelera; Keywords[es_VE]=escritorio;casa;botón;papelera; Keywords[et]=töölaud;kodu nupp;prügikast; Keywords[et_EE]=töölaud;kodu nupp;prügikast; Keywords[eu]=mahaigaina;etxea;botoia;zakarrontzia; Keywords[fa]=دسکتاپ، خانه، دگمه، آشغال; Keywords[fa_AF]=دسکتاپ، خانه، دگمه، آشغال; Keywords[fa_IR]=دسکتاپ، خانه، دگمه، آشغال; Keywords[fi]=työpöytä;koti;näppäin;roskakori; Keywords[fi_FI]=työpöytä;koti;näppäin;roskakori; Keywords[fr]=bureau;dossier personnel;bouton;corbeille;poubelle; Keywords[fr_CA]=bureau;index;bouton;corbeille; Keywords[fr_FR]=bureau;dossier personnel;bouton;corbeille;poubelle; Keywords[ga]=deasc;baile;cnaipe;bruscar; Keywords[gd]=desktop;home;button;trash;dhachaigh;putan;sgudal; Keywords[gl]=escritorio;cartafol persoal;botón;lixo; Keywords[gl_ES]=escritorio;cartafol persoal;botón;lixo; Keywords[hr]=radna površina;osobna mapa;tipka;smeće; Keywords[hu]=asztal;saját mappa;gomb;kuka; Keywords[hu_HU]=asztal;saját mappa;gomb;kuka; Keywords[ia]=scriptorio;domo;button;immunditia; Keywords[id]=desktop;rumah;tombol;tong sampah; Keywords[id_ID]=desktop;rumah;tombol;tong sampah; Keywords[is]=skjáborð;heimamappa;hnappur;rusl; Keywords[it]=desktop. home;pulsante;cestino; Keywords[it_CH]=desktop. home;pulsante;cestino; Keywords[it_IT]=desktop. home;pulsante;cestino; Keywords[ja]=デスクトップ、ホーム、ボタン、ゴミ箱; Keywords[ja_JP]=デスクトップ、ホーム、ボタン、ゴミ箱; Keywords[kab]=tanarit;akaram udmawan;taqeffalt;taqerṭilt;iḍumman; Keywords[ko]=바탕화면;홈;버튼;휴지통; Keywords[ko_KR]=바탕화면;홈;버튼;휴지통; Keywords[lo]=ພື້ນທີ່ໜ້າຈໍ;ໜ້າທຳອິດ;ປູ່ມ;ຖັງຂີ້ເຫຍື້ອ; Keywords[lo_LA]=ພື້ນທີ່ໜ້າຈໍ;ໜ້າທຳອິດ;ປູ່ມ;ຖັງຂີ້ເຫຍື້ອ; Keywords[lt]=darbalaukis;namai;mygtukas;šiukšlinė; Keywords[lt_LT]=darbalaukis;namai;mygtukas;šiukšlinė; Keywords[lv]=darbvirsma;mājas;poga;miskaste; Keywords[lv_LV]=darbvirsma;mājas;poga;miskaste; Keywords[ms]=desktop;rumah;butang;tong sampah; Keywords[ms_MY]=desktop;rumah;butang;tong sampah; Keywords[nb]=skrivebord;hjem;knapp;søppel; Keywords[nb_NO]=skrivebord;hjem;knapp;søppel; Keywords[nds]=Desktop;Home;Knopf;Papierkorb; Keywords[nl]=bureaublad;persoonlijke map;knop;prullenbak; Keywords[nl_NL]=bureaublad;persoonlijke map;knop;prullenbak; Keywords[om]=foddaa;ka'uumsa;qabduu;korboo balfaa; Keywords[pa]=ਡੈਸਕਟਾੱਪ;ਘਰ;ਬਟਨ;ਕੂੜੇਦਾਨ; Keywords[pl]=pulpit;home;przycisk;kosz; Keywords[pl_PL]=pulpit;home;przycisk;kosz; Keywords[pt]=ambiente de trabalho;pasta pessoal;botão;lixo; Keywords[pt_BR]=área de trabalho;pasta pessoal;botão;lixeira; Keywords[pt_PT]=ambiente de trabalho;pasta pessoal;botão;lixo; Keywords[ro]=spațiu de lucru;dosar personal;buton;gunoi; Keywords[ro_RO]=spațiu de lucru;dosar personal;buton;gunoi; Keywords[ru]=рабочий стол;домашняя;кнопка;корзина; Keywords[sk]=plocha;domov;tlačidlo;kôš; Keywords[sk_SK]=plocha;domov;tlačidlo;kôš; Keywords[sl]=namizje;dom;gumb;smeti; Keywords[sl_SI]=namizje;dom;gumb;smeti; Keywords[sq]=desktop;shtëpi;buton;kosh; Keywords[sr]=површ;лично;дугме;смеће; Keywords[sr@Latn]=површ;лично;дугме;смеће; Keywords[sr@ije]=површ;лично;дугме;смеће; Keywords[sr@ijekavianlatin]=површ;лично;дугме;смеће; Keywords[sr@latin]=површ;лично;дугме;смеће; Keywords[sr_RS]=површ;лично;дугме;смеће; Keywords[sr_RS@latin]=површ;лично;дугме;смеће; Keywords[sv]=skrivbord;hem;knapp;papperskorgen; Keywords[ta]=பணிமேடை;முகப்பு;பொத்தான்;குப்பை; Keywords[ta_LK]=பணிமேடை;முகப்பு;பொத்தான்;குப்பை; Keywords[tg]=мизи корӣ;асосӣ;тугма;сабад; Keywords[th]=พื้นโต๊ะ;บ้าน;ปุ่ม;ถังขยะ; Keywords[th_TH]=พื้นโต๊ะ;บ้าน;ปุ่ม;ถังขยะ; Keywords[tr]=masaüstü;ev;düğme;çöp kutusu; Keywords[tr_TR]=masaüstü;ev;düğme;çöp kutusu; Keywords[uk]=стільниця;домівка;кнопка;смітник; Keywords[uk_UA]=стільниця;домівка;кнопка;смітник; Keywords[ur]=ڈیسک ٹاپ، ھوم، بٹن، ردی; Keywords[vi]=màn hình làm việc;nhà;nút;thùng rác; Keywords[vi_VN]=màn hình làm việc;nhà;nút;thùng rác; Keywords[zh_CN]=desktop;home;button;trash;桌面;按钮;回收站;主目录; Keywords[zh_HK]=桌面;家目錄;按鈕;垃圾桶; Keywords[zh_TW]=桌面;家屋;按鍵;回收筒; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-hotcorner.desktop0000664000175000017500000004076613215735076027002 0ustar fabiofabio[Desktop Entry] Icon=cs-overview Exec=cinnamon-settings hotcorner Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Hot Corners Name[am]=ጠርዞች Name[ar]=أركان ساخنة Name[be]=Гарачы Кут Name[be@latin]=Гарачы Кут Name[be_BY]=Гарачы Кут Name[bg]=Активни ъгли Name[bg_BG]=Активни ъгли Name[bs]=Uglovi ekrana Name[ca]=Cantonades actives Name[ca@valencia]=Cantons actius Name[ca_ES]=Cantonades actives Name[ca_ES@valencia]=Cantons actius Name[cs]=Aktivní rohy Name[cs_CZ]=Aktivní rohy Name[cy]=Corneli Poeth Name[da]=Aktive hjørner Name[da_DK]=Aktive hjørner Name[de]=Aktive Ecken Name[de_CH]=Aktive Ecken Name[de_DE]=Aktive Ecken Name[el]=Ενεργές γωνίες Name[es]=Esquinas activas Name[es_AR]=Esquinas activas Name[es_CL]=Esquinas activas Name[es_CO]=Esquinas activas Name[es_CR]=Esquinas activas Name[es_DO]=Esquinas activas Name[es_EC]=Esquinas activas Name[es_ES]=Esquinas activas Name[es_MX]=Esquinas activas Name[es_NI]=Esquinas activas Name[es_PA]=Esquinas activas Name[es_PE]=Esquinas activas Name[es_PR]=Esquinas activas Name[es_SV]=Esquinas activas Name[es_UY]=Esquinas activas Name[es_VE]=Esquinas activas Name[et]=Abistavad nurgad Name[et_EE]=Abistavad nurgad Name[eu]=Izkina beroak Name[fi]=Toimintokulmat Name[fi_FI]=Toimintokulmat Name[fr]=Coins intelligents Name[fr_CA]=Coins intelligents Name[fr_FR]=Coins intelligents Name[ga]=Cúinní teo Name[gd]=Oiseanan teth Name[gl]=Cantos activos Name[gl_ES]=Cantos activos Name[hr]=Kutovi zaslona Name[hu]=Érzékeny sarkok Name[hu_HU]=Érzékeny sarkok Name[ia]=Angulos calide Name[id]=Pojok Interaktif Name[id_ID]=Pojok Interaktif Name[is]=Virk skjáhorn Name[it]=Angoli attivi Name[it_CH]=Angoli attivi Name[it_IT]=Angoli attivi Name[ja]=ホットコーナー Name[ja_JP]=ホットコーナー Name[ko]=핫코너 Name[ko_KR]=핫코너 Name[lt]=Karštieji kampai Name[lt_LT]=Karštieji kampai Name[lv]=Aktīvie stūri Name[lv_LV]=Aktīvie stūri Name[ms]=Bucu Panas Name[ms_MY]=Bucu Panas Name[nb]=Aktive hjørner Name[nb_NO]=Aktive hjørner Name[nds]=Schnellzugriffsecken Name[nl]=Actieve hoeken Name[nl_NL]=Actieve hoeken Name[pl]=Aktywne narożniki Name[pl_PL]=Aktywne narożniki Name[pt]=Locais de ativação Name[pt_BR]=Cantos de Atalho Name[pt_PT]=Locais de ativação Name[ro]=Colțuri sensibile Name[ro_RO]=Colțuri sensibile Name[ru]=Горячие углы Name[sk]=Aktívne rohy Name[sk_SK]=Aktívne rohy Name[sl]=Vroči koti Name[sl_SI]=Vroči koti Name[sq]=Këndet aktivë Name[sr]=Вруће ивице Name[sr@Latn]=Вруће ивице Name[sr@ije]=Вруће ивице Name[sr@ijekavianlatin]=Вруће ивице Name[sr@latin]=Вруће ивице Name[sr_RS]=Вруће ивице Name[sr_RS@latin]=Вруће ивице Name[sv]=Aktiva hörn Name[tg]=Кунҷҳои тез Name[th]=มุมที่น่าสนใจ Name[th_TH]=มุมที่น่าสนใจ Name[tr]=Etkin Köşeler Name[tr_TR]=Etkin Köşeler Name[uk]=Гарячі кути Name[uk_UA]=Гарячі кути Name[ur]=ہاٹ کونے Name[vi]=Góc nóng Name[vi_VN]=Góc nóng Name[zh_CN]=热区 Name[zh_TW]=熱角 Comment=Manage hotcorner settings Comment[ar]=إدارة إعدادات الركن الساخن Comment[be]=Кіраванне наладамі гарачых кутоў Comment[be@latin]=Кіраванне наладамі гарачых кутоў Comment[be_BY]=Кіраванне наладамі гарачых кутоў Comment[bg]=Управление на настройките на активните ъгли Comment[bg_BG]=Управление на настройките на активните ъгли Comment[bs]=Upravljaj postavkama uglova ekrana Comment[ca]=Gestioneu els ajusts de les cantonades actives Comment[ca@valencia]=Administra configuració de cantons actius Comment[ca_ES]=Gestioneu els ajusts de les cantonades actives Comment[ca_ES@valencia]=Administra configuració de cantons actius Comment[cs]=Nastavení horkých rohů Comment[cs_CZ]=Nastavení horkých rohů Comment[cy]=Rheolwch osodiadau y gornel boeth Comment[da]=Administrér indstillinger for aktive hjørner Comment[da_DK]=Administrér indstillinger for aktive hjørner Comment[de]=Einstellungen der aktiven Ecken verwalten Comment[de_CH]=Einstellungen der aktiven Ecken verwalten Comment[de_DE]=Einstellungen der aktiven Ecken verwalten Comment[el]=Ρυθμίστε τις ενεργές γωνίες Comment[es]=Administrar configuración de esquinas activas Comment[es_AR]=Administrar configuración de esquinas activas Comment[es_CL]=Administrar configuración de esquinas activas Comment[es_CO]=Administrar configuración de esquinas activas Comment[es_CR]=Administrar configuración de esquinas activas Comment[es_DO]=Administrar configuración de esquinas activas Comment[es_EC]=Administrar configuración de esquinas activas Comment[es_ES]=Administrar configuración de esquinas activas Comment[es_MX]=Administrar configuración de esquinas activas Comment[es_NI]=Administrar configuración de esquinas activas Comment[es_PA]=Administrar configuración de esquinas activas Comment[es_PE]=Administrar configuración de esquinas activas Comment[es_PR]=Administrar configuración de esquinas activas Comment[es_SV]=Administrar configuración de esquinas activas Comment[es_UY]=Administrar configuración de esquinas activas Comment[es_VE]=Administrar configuración de esquinas activas Comment[eu]=Kudeatu izkina beroen ezarpenak Comment[fi]=Muuta toimintonurkkien asetuksia Comment[fi_FI]=Muuta toimintonurkkien asetuksia Comment[fr]=Gérez les paramètres des coins intelligents Comment[fr_CA]=Gérer les paramètres des coins intelligents Comment[fr_FR]=Gérez les paramètres des coins intelligents Comment[gd]=Stiùirich roghainnean a' hotcorner Comment[gl]=Administra os axustes dos recantos activos Comment[gl_ES]=Administra os axustes dos recantos activos Comment[hr]=Upravljajte postavkama kutova zaslona Comment[hu]=Érzékeny sarok beállítása Comment[hu_HU]=Érzékeny sarok beállítása Comment[ia]=Administrar le preferentias de angulo calide Comment[id]=Atur Pengaturan hotcorner Comment[id_ID]=Atur Pengaturan hotcorner Comment[is]=Sýsla með stillingar fyrir virk skjáhorn Comment[it]=Gestisci impostazioni degli angoli attivi Comment[it_CH]=Gestisci impostazioni degli angoli attivi Comment[it_IT]=Gestisci impostazioni degli angoli attivi Comment[ja]=ホットコーナー設定管理 Comment[ja_JP]=ホットコーナー設定管理 Comment[ko]=핫코너 설정 관리하기 Comment[ko_KR]=핫코너 설정 관리하기 Comment[lo]=ຈັດການການຕັ້ງຄ່າ hotcorner Comment[lo_LA]=ຈັດການການຕັ້ງຄ່າ hotcorner Comment[lt]=Tvarkyti karštųjų kampų nustatymus Comment[lt_LT]=Tvarkyti karštųjų kampų nustatymus Comment[lv]=Pērvaldīt aktīvo stūru iestatījumus Comment[lv_LV]=Pērvaldīt aktīvo stūru iestatījumus Comment[ms]=Mengurus tetapan hotcorner Comment[ms_MY]=Mengurus tetapan hotcorner Comment[nb]=Håndter aktive hjørner-innstillinger Comment[nb_NO]=Håndter aktive hjørner-innstillinger Comment[nds]=Schnellzugriffsecken-Einstellungen bearbeiten Comment[nl]=Instellingen voor actieve hoeken beheren Comment[nl_NL]=Instellingen voor actieve hoeken beheren Comment[oc]=Gerissètz los paramètres dels caires intelligents Comment[pl]=Zarządzaj ustawieniami aktywnego narożnika Comment[pl_PL]=Zarządzaj ustawieniami aktywnego narożnika Comment[pt]=Gerir as definições dos cantos Comment[pt_BR]=Gerenciar as definições dos cantos Comment[pt_PT]=Gerir as definições dos cantos Comment[ro]=Gestionează setările colțurilor sensibile Comment[ro_RO]=Gestionează setările colțurilor sensibile Comment[ru]=Управление настройками горячих углов Comment[sk]=Spravovať nastavenia aktívnych rohov Comment[sk_SK]=Spravovať nastavenia aktívnych rohov Comment[sl]=Upravljajte z nastavitvami hitrih kotov Comment[sl_SI]=Upravljajte z nastavitvami hitrih kotov Comment[sq]=Menaxhoni parametrat e këndeve aktivë Comment[sr]=Управљање подешавањима врућих ивица Comment[sr@Latn]=Управљање подешавањима врућих ивица Comment[sr@ije]=Управљање подешавањима врућих ивица Comment[sr@ijekavianlatin]=Управљање подешавањима врућих ивица Comment[sr@latin]=Управљање подешавањима врућих ивица Comment[sr_RS]=Управљање подешавањима врућих ивица Comment[sr_RS@latin]=Управљање подешавањима врућих ивица Comment[sv]=Hantera inställningar för aktiva hörn Comment[tg]=Идоракунии танзимоти кунҷи тезкор Comment[th]=จัดการการตั้งค่ามุมร้อน Comment[th_TH]=จัดการการตั้งค่ามุมร้อน Comment[tr]=Etkin köşe ayarlarını yönet Comment[tr_TR]=Etkin köşe ayarlarını yönet Comment[uk]=Керування налаштуваннями гарячих кутів Comment[uk_UA]=Керування налаштуваннями гарячих кутів Comment[ur]=ہاٹ کونے کی ترتیبات کا انتظام Comment[vi]=Quản lý thiết đặt góc nóng Comment[vi_VN]=Quản lý thiết đặt góc nóng Comment[zh_CN]=热角设置 Comment[zh_HK]=管理 hotcorner 設定 Comment[zh_TW]=管理熱角設定 Keywords=hotcorner;overview;scale;expo; Keywords[am]=ጠርዞች: ባጠቃላይ: መጠን: expo; Keywords[ar]=أركان ساخنة، رؤية عامة، تحجيم، معرض; Keywords[be]=гарачы кут;агляд;маштабаванне;экспазіцыя; Keywords[be@latin]=гарачы кут;агляд;маштабаванне;экспазіцыя; Keywords[be_BY]=гарачы кут;агляд;маштабаванне;экспазіцыя; Keywords[bg]=Активен ъгъл;преглед;мащаб;експозиция; Keywords[bg_BG]=Активен ъгъл;преглед;мащаб;експозиция; Keywords[bs]=ugao ekrana;pregled;promjena veličine;prikaz radnih prostora; Keywords[ca]=cantonada activa;vista general;escala;expo; Keywords[ca@valencia]=cantó actiu;vista general;escala;exposició; Keywords[ca_ES]=cantonada activa;vista general;escala;expo; Keywords[ca_ES@valencia]=cantó actiu;vista general;escala;exposició; Keywords[cs]=aktivní roh;přehled;scale;expo; Keywords[cs_CZ]=aktivní roh;přehled;scale;expo; Keywords[cy]=cornel poeth;trosolwg;graddfa;dangos; Keywords[da]=aktiv hjørne;oversigt;skalér;vis arbejdsområder; Keywords[da_DK]=aktiv hjørne;oversigt;skalér;vis arbejdsområder; Keywords[de]=Aktive Ecke;Hotcorner;Übersicht;Fensterübersicht;Scale;Schreibtischübersicht;Arbeitsflächenübersicht;Expo; Keywords[de_CH]=Aktive Ecke;Hotcorner;Übersicht;Fensterübersicht;Scale;Schreibtischübersicht;Arbeitsflächenübersicht;Expo; Keywords[de_DE]=Aktive Ecke;Hotcorner;Übersicht;Fensterübersicht;Scale;Schreibtischübersicht;Arbeitsflächenübersicht;Expo; Keywords[el]=ενεργή γωνία;επισκόπηση;κλίμακα;expo; Keywords[es]=esquina activa;vista general;escala;expo; Keywords[es_AR]=esquina activa;vista general;escala;expo; Keywords[es_CL]=esquina activa;vista general;escala;expo; Keywords[es_CO]=esquina activa;vista general;escala;expo; Keywords[es_CR]=esquina activa;vista general;escala;expo; Keywords[es_DO]=esquina activa;vista general;escala;expo; Keywords[es_EC]=esquina activa;vista general;escala;expo; Keywords[es_ES]=esquina activa;vista general;escala;expo; Keywords[es_MX]=esquina activa;vista general;escala;expo; Keywords[es_NI]=esquina activa;vista general;escala;expo; Keywords[es_PA]=esquina activa;vista general;escala;expo; Keywords[es_PE]=esquina activa;vista general;escala;expo; Keywords[es_PR]=esquina activa;vista general;escala;expo; Keywords[es_SV]=esquina activa;vista general;escala;expo; Keywords[es_UY]=esquina activa;vista general;escala;expo; Keywords[es_VE]=esquina activa;vista general;escala;expo; Keywords[eu]=izkina beroa;ikuspegi orokorra;eskala;expo; Keywords[fi]=toimintokulma;yleiskuva;levitysnäkymä;esittelynäkymä; Keywords[fi_FI]=toimintokulma;yleiskuva;levitysnäkymä;esittelynäkymä; Keywords[fr]=coins intelligents;vue d'ensemble;échelle;expo; Keywords[fr_CA]=coins intelligents;vue d'ensemble;échelle;expo; Keywords[fr_FR]=coins intelligents;vue d'ensemble;échelle;expo; Keywords[ga]=cúinne te;osamharc;scála;expo; Keywords[gd]=oisean teth;foir-shealladh;sgèile;hotcorner;overview;scale;expo; Keywords[gl]=canto activo;vista xeral;escala;exposición; Keywords[gl_ES]=canto activo;vista xeral;escala;exposición; Keywords[hr]=kut zaslona;pregled;promjena veličine;prikaz radnih prostora; Keywords[hu]=érzékeny sarkok;áttekintés;áttekintő;közszemle; Keywords[hu_HU]=érzékeny sarkok;áttekintés;áttekintő;közszemle; Keywords[ia]=angulo calide;vista general;scala;exposition; Keywords[id]=pojok interaktif;overview;skala;ekspo; Keywords[id_ID]=pojok interaktif;overview;skala;ekspo; Keywords[is]=virk horn;hotcorner;yfirlit;scale;expo; Keywords[it]=hotcorner;panoramica;scale;expo; Keywords[it_CH]=hotcorner;panoramica;scale;expo; Keywords[it_IT]=hotcorner;panoramica;scale;expo; Keywords[ja]=ホットコーナー、外観、スケール、expo; Keywords[ja_JP]=ホットコーナー、外観、スケール、expo; Keywords[ko]=핫코너;전체 창 보기;스케일;작업 공간 보기; Keywords[ko_KR]=핫코너;전체 창 보기;스케일;작업 공간 보기; Keywords[lo]=hotcorner;ພາບລວມ;ປັບຂະໜາດ;expo; Keywords[lo_LA]=hotcorner;ພາບລວມ;ປັບຂະໜາດ;expo; Keywords[lt]=karštas kampas;peržiūra;dydžio keitimas;atvaizdavimas; Keywords[lt_LT]=karštas kampas;peržiūra;dydžio keitimas;atvaizdavimas; Keywords[ms]=bucu panas;selayang pandang;skala;ekspo; Keywords[ms_MY]=bucu panas;selayang pandang;skala;ekspo; Keywords[nb]=aktiv hjørne;overblikk;skaler;expo; Keywords[nb_NO]=aktiv hjørne;overblikk;skaler;expo; Keywords[nds]=Hotcornor;Übersicht;Skalierung;EXPO; Keywords[nl]=actieve hoek;overzicht;schalen;expo; Keywords[nl_NL]=actieve hoek;overzicht;schalen;expo; Keywords[pl]=aktywny narożnik;przegląd;skala;ekspozycja; Keywords[pl_PL]=aktywny narożnik;przegląd;skala;ekspozycja; Keywords[pt]=local;resumo;escala;expo; Keywords[pt_BR]=canto de atalho;visão geral;escala;exposição; Keywords[pt_PT]=local;resumo;escala;expo; Keywords[ro]=colț sensibil;prezentare generală;scală;expo; Keywords[ro_RO]=colț sensibil;prezentare generală;scală;expo; Keywords[ru]=горячий угол;обзор;масштабирование;экспозиция; Keywords[sk]=aktívny roh;prehľad;mierka;expo; Keywords[sk_SK]=aktívny roh;prehľad;mierka;expo; Keywords[sl]=vroči kot;pregled;umeri;razstava; Keywords[sl_SI]=vroči kot;pregled;umeri;razstava; Keywords[sr]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr@Latn]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr@ije]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr@ijekavianlatin]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr@latin]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr_RS]=врућа ивица;преглед;распростирање;размеравање; Keywords[sr_RS@latin]=врућа ивица;преглед;распростирање;размеравање; Keywords[sv]=aktiva hörn;översikt;skala;exponering; Keywords[tg]=кунҷи тезкор;пешнамоиш;миқёсбандӣ;намоиш; Keywords[th]=มุมที่น่าสนใจ;ภาพรวม;สัดส่วน;แสดง; Keywords[th_TH]=มุมที่น่าสนใจ;ภาพรวม;สัดส่วน;แสดง; Keywords[tr]=Etkin köşe;genel bakış;ölçeklendirme;sergi; Keywords[tr_TR]=Etkin köşe;genel bakış;ölçeklendirme;sergi; Keywords[uk]=гарячий кут;огляд;масштабування;експозиція; Keywords[uk_UA]=гарячий кут;огляд;масштабування;експозиція; Keywords[ur]=ہاٹ کونے، جائزہ، سکیل، ایکسپو; Keywords[vi]=góc nóng;toàn cảnh;định tỷ lệ;expo; Keywords[vi_VN]=góc nóng;toàn cảnh;định tỷ lệ;expo; Keywords[zh_CN]=hotcorner;overview;scale;expo;热区;概览;缩放;展览;全局; Keywords[zh_HK]=hotcorner;概觀;比例縮放;expo; Keywords[zh_TW]=熱角;總覽;視窗管理 (Scale);工作區管理 (Expo); Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-extensions.desktop0000664000175000017500000003350613215735076027170 0ustar fabiofabio[Desktop Entry] Icon=cs-extensions Exec=cinnamon-settings extensions Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Extensions Name[am]=ተጨማሪዎች Name[ar]=إضافات Name[ast]=Estensiones Name[be]=Пашырэнні Name[be@latin]=Пашырэнні Name[be_BY]=Пашырэнні Name[bg]=Разширения Name[bg_BG]=Разширения Name[bs]=Proširenja Name[cs]=Rozšíření Name[cs_CZ]=Rozšíření Name[cy]=Estyniadau Name[da]=Udvidelser Name[da_DK]=Udvidelser Name[de]=Erweiterungen Name[de_CH]=Erweiterungen Name[de_DE]=Erweiterungen Name[el]=Επεκτάσεις Name[eo]=Etendaĵoj Name[es]=Extensiones Name[es_AR]=Extensiones Name[es_CL]=Extensiones Name[es_CO]=Extensiones Name[es_CR]=Extensiones Name[es_DO]=Extensiones Name[es_EC]=Extensiones Name[es_ES]=Extensiones Name[es_MX]=Extensiones Name[es_NI]=Extensiones Name[es_PA]=Extensiones Name[es_PE]=Extensiones Name[es_PR]=Extensiones Name[es_SV]=Extensiones Name[es_UY]=Extensiones Name[es_VE]=Extensiones Name[et]=Laiendid Name[et_EE]=Laiendid Name[eu]=Hedapenak Name[fa]=ضمیمه‌ها Name[fa_AF]=ضمیمه‌ها Name[fa_IR]=ضمیمه‌ها Name[fi]=Laajennukset Name[fi_FI]=Laajennukset Name[ga]=Iarmhíreanna Name[gd]=Leudachain Name[gl]=Extensións Name[gl_ES]=Extensións Name[hr]=Proširenja Name[hu]=Kiterjesztések Name[hu_HU]=Kiterjesztések Name[ia]=Extensiones Name[id]=Ekstensi Name[id_ID]=Ekstensi Name[is]=Viðbætur Name[it]=Estensioni Name[it_CH]=Estensioni Name[it_IT]=Estensioni Name[ja]=拡張機能 Name[ja_JP]=拡張機能 Name[kab]=Isiɣzifen Name[ko]=확장 프로그램 Name[ko_KR]=확장 프로그램 Name[lo]=ສ່ວນຂະຫຍາຍ Name[lo_LA]=ສ່ວນຂະຫຍາຍ Name[lt]=Plėtiniai Name[lt_LT]=Plėtiniai Name[lv]=Papildinājumi Name[lv_LV]=Papildinājumi Name[ms]=Sambungan Name[ms_MY]=Sambungan Name[nb]=Utvidelser Name[nb_NO]=Utvidelser Name[nds]=Erweiterungen Name[nl]=Extensies Name[nl_NL]=Extensies Name[pa]=ਐਕਸਟੈਂਸ਼ਨਾਂ Name[pl]=Rozszerzenia Name[pl_PL]=Rozszerzenia Name[pt]=Extensões Name[pt_BR]=Extensões Name[pt_PT]=Extensões Name[ro]=Extensii Name[ro_RO]=Extensii Name[ru]=Расширения Name[sk]=Rozšírenia Name[sk_SK]=Rozšírenia Name[sl]=Razširitve Name[sl_SI]=Razširitve Name[sq]=Prapashtesat Name[sr]=Проширења Name[sr@Latn]=Проширења Name[sr@ije]=Проширења Name[sr@ijekavianlatin]=Проширења Name[sr@latin]=Проширења Name[sr_RS]=Проширења Name[sr_RS@latin]=Проширења Name[sv]=Tillägg Name[ta]=நீட்சிகள் Name[ta_LK]=நீட்சிகள் Name[tg]=Пасвандҳо Name[th]=ส่วนขยาย Name[th_TH]=ส่วนขยาย Name[tr]=Eklentiler Name[tr_TR]=Eklentiler Name[uk]=Розширення Name[uk_UA]=Розширення Name[ur]=ایکس ٹینشنز Name[vi]=Phần mở rộng Name[vi_VN]=Phần mở rộng Name[zh_CN]=扩展 Name[zh_HK]=擴充套件 Name[zh_TW]=擴充套件 Comment=Manage your Cinnamon extensions Comment[am]=የሲናሞን ተጨማሪዎች አስተዳዳሪ Comment[ar]=إدارة إضافات سينامُن Comment[ast]=Alministra les tos estensiones Cinnamon Comment[be]=Кiраванне пашырэннямi Cinnamon Comment[be@latin]=Кiраванне пашырэннямi Cinnamon Comment[be_BY]=Кiраванне пашырэннямi Cinnamon Comment[bg]=Управление на Вашите разширения за Cinnamon Comment[bg_BG]=Управление на Вашите разширения за Cinnamon Comment[bs]=Upravljajte vašim Cinnamon proširenjima Comment[ca]=Gestioneu les vostres extensions de Cinnamon Comment[ca@valencia]=Administra extensions de Cinnamon Comment[ca_ES]=Gestioneu les vostres extensions de Cinnamon Comment[ca_ES@valencia]=Administra extensions de Cinnamon Comment[cs]=Správa Cinnamon rozšíření Comment[cs_CZ]=Správa Cinnamon rozšíření Comment[cy]=Rheolwch eich estyniadau Cinnamon Comment[da]=Administrér dine Cinnamon-udvidelser Comment[da_DK]=Administrér dine Cinnamon-udvidelser Comment[de]=Cinnamon-Erweiterungen verwalten Comment[de_CH]=Cinnamon-Erweiterungen verwalten Comment[de_DE]=Cinnamon-Erweiterungen verwalten Comment[el]=Διαχειρίσου τις επεκτάσεις του Cinnamon Comment[es]=Administrar extensiones de Cinnamon Comment[es_AR]=Administrar extensiones de Cinnamon Comment[es_CL]=Administrar extensiones de Cinnamon Comment[es_CO]=Administrar extensiones de Cinnamon Comment[es_CR]=Administrar extensiones de Cinnamon Comment[es_DO]=Administrar extensiones de Cinnamon Comment[es_EC]=Administrar extensiones de Cinnamon Comment[es_ES]=Administrar extensiones de Cinnamon Comment[es_MX]=Administrar extensiones de Cinnamon Comment[es_NI]=Administrar extensiones de Cinnamon Comment[es_PA]=Administrar extensiones de Cinnamon Comment[es_PE]=Administrar extensiones de Cinnamon Comment[es_PR]=Administrar extensiones de Cinnamon Comment[es_SV]=Administrar extensiones de Cinnamon Comment[es_UY]=Administrar extensiones de Cinnamon Comment[es_VE]=Administrar extensiones de Cinnamon Comment[eu]=Kudeatu zure Cinnamon hedapenak Comment[fa]=ضمیمه‌های سینمون‌تان را مدیریت کنید Comment[fa_AF]=ضمیمه‌های سینمون‌تان را مدیریت کنید Comment[fa_IR]=ضمیمه‌های سینمون‌تان را مدیریت کنید Comment[fi]=Hallitse Cinnamon-laajennuksia Comment[fi_FI]=Hallitse Cinnamon-laajennuksia Comment[fr]=Gérez vos extensions Cinnamon Comment[fr_CA]=Gérer les extensions Cinnamon Comment[fr_FR]=Gérez vos extensions Cinnamon Comment[gd]=Stiùirich na leudachain Cinnamon agad Comment[gl]=Administra os engadidos de Cinnamon Comment[gl_ES]=Administra os engadidos de Cinnamon Comment[hr]=Upravljajte svojim Cinnamon proširenjima Comment[hu]=Cinnamon kiterjesztések kezelése Comment[hu_HU]=Cinnamon kiterjesztések kezelése Comment[ia]=Administrar tu extensiones de Cinnamon Comment[id]=Pengaturan extensions Cinnamon Comment[id_ID]=Pengaturan extensions Cinnamon Comment[is]=Sýsla með stillingar fyrir Cinnamon viðbætur Comment[it]=Gestisci le estensioni di Cinnamon Comment[it_CH]=Gestisci le estensioni di Cinnamon Comment[it_IT]=Gestisci le estensioni di Cinnamon Comment[ja]=Cinnamon エクステンションの管理 Comment[ja_JP]=Cinnamon エクステンションの管理 Comment[kab]=Sefrek izsiɣzaf n Cinamon Comment[ko]=시나몬 확장 프로그램을 관리합니다 Comment[ko_KR]=시나몬 확장 프로그램을 관리합니다 Comment[lo]=ຈັດການສ່ວນຂະຫຍາຍ Cinnamon ຂອງເຈົ້າ Comment[lo_LA]=ຈັດການສ່ວນຂະຫຍາຍ Cinnamon ຂອງເຈົ້າ Comment[lt]=Tvarkyti savo Cinnamono plėtinius Comment[lt_LT]=Tvarkyti savo Cinnamono plėtinius Comment[lv]=Pārvaldīt Cinnamon papildinājumus Comment[lv_LV]=Pārvaldīt Cinnamon papildinājumus Comment[ms]=Mengurus lanjutan Cinnamon Comment[ms_MY]=Mengurus lanjutan Cinnamon Comment[nb]=Håndter dine Cinnamon-utvidelser Comment[nb_NO]=Håndter dine Cinnamon-utvidelser Comment[nds]=Cinnamon Erweiterungen bearbeiten Comment[nl]=Uw Cinnamon-extensies beheren Comment[nl_NL]=Uw Cinnamon-extensies beheren Comment[oc]=Gerir vòstras extensions de Cinnamon Comment[pl]=Zarządzaj swoimi rozszerzeniami Cinnamona Comment[pl_PL]=Zarządzaj swoimi rozszerzeniami Cinnamona Comment[pt]=Gerir as suas extensões do Cinnamon Comment[pt_BR]=Gerenciar suas extensões do Cinnamon Comment[pt_PT]=Gerir as suas extensões do Cinnamon Comment[ro]=Gestionează extensiile tale Cinnamon Comment[ro_RO]=Gestionează extensiile tale Cinnamon Comment[ru]=Управление расширениями Cinnamon Comment[sk]=Spravovať vaše rozšírenia prostredia Cinnamon Comment[sk_SK]=Spravovať vaše rozšírenia prostredia Cinnamon Comment[sl]=Upravljajte z razširitvami Cinnamona Comment[sl_SI]=Upravljajte z razširitvami Cinnamona Comment[sq]=Menaxhoni prapashtesat e Cinnamon Comment[sr]=Управљање проширењима Цимета Comment[sr@Latn]=Управљање проширењима Цимета Comment[sr@ije]=Управљање проширењима Цимета Comment[sr@ijekavianlatin]=Управљање проширењима Цимета Comment[sr@latin]=Управљање проширењима Цимета Comment[sr_RS]=Управљање проширењима Цимета Comment[sr_RS@latin]=Управљање проширењима Цимета Comment[sv]=Hantera dina Cinnamon-tillägg Comment[tg]=Идоракунии пасвандҳои Cinnamon Comment[th]=จัดการส่วนขยาย Cinnamon ของคุณ Comment[th_TH]=จัดการส่วนขยาย Cinnamon ของคุณ Comment[tr]=Cinnamon eklentilerini yönet Comment[tr_TR]=Cinnamon eklentilerini yönet Comment[uk]=Керування розширеннями Cinnamon Comment[uk_UA]=Керування розширеннями Cinnamon Comment[ur]=اپنے سنامون کی ایکسٹینشن کا انتظام کریں Comment[vi]=Quản lý phần mở rộng Cinnamon Comment[vi_VN]=Quản lý phần mở rộng Cinnamon Comment[zh_CN]=扩展管理 Comment[zh_HK]=管理你的 Cinnamon 擴充套件 Comment[zh_TW]=管理您的 Cinnamon 擴充套件 Keywords=extension;addon; Keywords[am]=ተጨማሪ መጨመሪያ; Keywords[ar]=إضافة، إضافات; Keywords[ast]=estensión;addon;amiestu; Keywords[be]=пашырэнне;дадатак; Keywords[be@latin]=пашырэнне;дадатак; Keywords[be_BY]=пашырэнне;дадатак; Keywords[bg]=разширение;добавка; Keywords[bg_BG]=разширение;добавка; Keywords[bs]=proširenje;dodatak; Keywords[ca]=extensió;complement; Keywords[ca@valencia]=extensió;complement; Keywords[ca_ES]=extensió;complement; Keywords[ca_ES@valencia]=extensió;complement; Keywords[cs]=rozšíření;addon; Keywords[cs_CZ]=rozšíření;addon; Keywords[cy]=estyniad;ychwanegyn; Keywords[da]=udvidelse;tilføjelse; Keywords[da_DK]=udvidelse;tilføjelse; Keywords[de]=Erweiterung;Zusatz;extension;addon; Keywords[de_CH]=Erweiterung;Zusatz;extension;addon; Keywords[de_DE]=Erweiterung;Zusatz;extension;addon; Keywords[el]=επέκταση;πρόσθετο; Keywords[en_GB]=extension;add-on; Keywords[es]=extensión;complemento; Keywords[es_AR]=extensión;complemento; Keywords[es_CL]=extensión;complemento; Keywords[es_CO]=extensión;complemento; Keywords[es_CR]=extensión;complemento; Keywords[es_DO]=extensión;complemento; Keywords[es_EC]=extensión;complemento; Keywords[es_ES]=extensión;complemento; Keywords[es_MX]=extensión;complemento; Keywords[es_NI]=extensión;complemento; Keywords[es_PA]=extensión;complemento; Keywords[es_PE]=extensión;complemento; Keywords[es_PR]=extensión;complemento; Keywords[es_SV]=extensión;complemento; Keywords[es_UY]=extensión;complemento; Keywords[es_VE]=extensión;complemento; Keywords[eu]=hedapena;gehigarria; Keywords[fa]=ضمیمه، افزونه; Keywords[fa_AF]=ضمیمه، افزونه; Keywords[fa_IR]=ضمیمه، افزونه; Keywords[fi]=laajennus;liitännäinen; Keywords[fi_FI]=laajennus;liitännäinen; Keywords[fr]=extension;add-on; Keywords[fr_CA]=extension;add-on; Keywords[fr_FR]=extension;add-on; Keywords[ga]=iarmhír;forlíontán; Keywords[gd]=leudachan;tuilleadain;extension;addon; Keywords[gl]=extensión;engadido; Keywords[gl_ES]=extensión;engadido; Keywords[hr]=proširenje;dodatak; Keywords[hu]=kiterjesztés;bővítmény; Keywords[hu_HU]=kiterjesztés;bővítmény; Keywords[id]=ekstensi;tambahan; Keywords[id_ID]=ekstensi;tambahan; Keywords[is]=viðbót;hjálparforrit; Keywords[it]=estensione;aggiunta; Keywords[it_CH]=estensione;aggiunta; Keywords[it_IT]=estensione;aggiunta; Keywords[ja]=拡張機能、アドオン; Keywords[ja_JP]=拡張機能、アドオン; Keywords[kab]=Asiɣzef; Keywords[ko]=확장 프로그램;추가 기능; Keywords[ko_KR]=확장 프로그램;추가 기능; Keywords[lo]=ສ່ວນຂະຫຍາຍ;addon; Keywords[lo_LA]=ສ່ວນຂະຫຍາຍ;addon; Keywords[lt]=plėtinys;papildinys; Keywords[lt_LT]=plėtinys;papildinys; Keywords[lv]=paplašinājums;pievienojums; Keywords[lv_LV]=paplašinājums;pievienojums; Keywords[ms]=sambungan;tambahan; Keywords[ms_MY]=sambungan;tambahan; Keywords[nb]=Utvidelse;tillegg; Keywords[nb_NO]=Utvidelse;tillegg; Keywords[nds]=Erweiterung;Add-On; Keywords[nl]=extensie;toevoeging; Keywords[nl_NL]=extensie;toevoeging; Keywords[pl]=rozszerzenie;dodatek; Keywords[pl_PL]=rozszerzenie;dodatek; Keywords[pt]=extensão;extra; Keywords[pt_BR]=extensão;complemento; Keywords[pt_PT]=extensão;extra; Keywords[ro]=extensie;supliment; Keywords[ro_RO]=extensie;supliment; Keywords[ru]=расширение;дополнение; Keywords[sk]=rozšírenie;addon; Keywords[sk_SK]=rozšírenie;addon; Keywords[sl]=razširitev;dodatek; Keywords[sl_SI]=razširitev;dodatek; Keywords[sq]=prapashtesa;shtesë; Keywords[sr]=проширење;додатак; Keywords[sr@Latn]=проширење;додатак; Keywords[sr@ije]=проширење;додатак; Keywords[sr@ijekavianlatin]=проширење;додатак; Keywords[sr@latin]=проширење;додатак; Keywords[sr_RS]=проширење;додатак; Keywords[sr_RS@latin]=проширење;додатак; Keywords[sv]=utvidgning;tillägg; Keywords[ta]=நீட்சி; Keywords[ta_LK]=நீட்சி; Keywords[tg]=пасванд;барномаи иловагӣ; Keywords[th]=ส่วนขยาย;ส่วนเสริม; Keywords[th_TH]=ส่วนขยาย;ส่วนเสริม; Keywords[tr]=eklenti; Keywords[tr_TR]=eklenti; Keywords[uk]=розширення;додаток; Keywords[uk_UA]=розширення;додаток; Keywords[ur]=ایکسٹینشن، ایڈ آن; Keywords[vi]=phần mở rộng;gắn thêm; Keywords[vi_VN]=phần mở rộng;gắn thêm; Keywords[zh_CN]=extension;addon;扩展;附加; Keywords[zh_HK]=擴充套件;附加元件; Keywords[zh_TW]=擴充套件;附加套件; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-privacy.desktop0000664000175000017500000003223213215735076026441 0ustar fabiofabio[Desktop Entry] Icon=cs-privacy Exec=cinnamon-settings privacy Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Privacy Name[am]=የ ግል Name[ar]=الخصوصية Name[ast]=Privacidá Name[bg]=Поверителност Name[bg_BG]=Поверителност Name[ca]=Privadesa Name[ca@valencia]=Privacitat Name[ca_ES]=Privadesa Name[ca_ES@valencia]=Privacitat Name[cs]=Soukromí Name[cs_CZ]=Soukromí Name[cy]=Preifatwydd Name[da]=Privatliv Name[da_DK]=Privatliv Name[de]=Datenschutz Name[de_CH]=Datenschutz Name[de_DE]=Datenschutz Name[el]=Ιδιωτικότητα Name[eo]=Privateco Name[es]=Privacidad Name[es_AR]=Privacidad Name[es_CL]=Privacidad Name[es_CO]=Privacidad Name[es_CR]=Privacidad Name[es_DO]=Privacidad Name[es_EC]=Privacidad Name[es_ES]=Privacidad Name[es_MX]=Privacidad Name[es_NI]=Privacidad Name[es_PA]=Privacidad Name[es_PE]=Privacidad Name[es_PR]=Privacidad Name[es_SV]=Privacidad Name[es_UY]=Privacidad Name[es_VE]=Privacidad Name[et]=Privaatsus Name[et_EE]=Privaatsus Name[eu]=Pribatutasuna Name[fi]=Yksityisyys Name[fi_FI]=Yksityisyys Name[fr]=Confidentialité Name[fr_CA]=Confidentialité Name[fr_FR]=Confidentialité Name[gd]=Prìobhaideachd Name[gl]=Intimidade Name[gl_ES]=Intimidade Name[hr]=Privatnost Name[hu]=Magánszféra Name[hu_HU]=Magánszféra Name[ia]=Confidentialitate Name[id]=Privasi Name[id_ID]=Privasi Name[is]=Friðhelgi Name[ja]=個人情報 Name[ja_JP]=個人情報 Name[ko]=프라이버시 Name[ko_KR]=프라이버시 Name[lt]=Privatumas Name[lt_LT]=Privatumas Name[ms]=Privasi Name[ms_MY]=Privasi Name[nb]=Personvern Name[nb_NO]=Personvern Name[nds]=Privatssphäre Name[nl]=Privéleven Name[nl_NL]=Privéleven Name[oc]=Vida privada Name[pl]=Prywatność Name[pl_PL]=Prywatność Name[pt]=Privacidade Name[pt_BR]=Privacidade Name[pt_PT]=Privacidade Name[ro]=Confidențialitate Name[ro_RO]=Confidențialitate Name[ru]=Конфиденциальность Name[sk]=Súkromie Name[sk_SK]=Súkromie Name[sl]=Zasebnost Name[sl_SI]=Zasebnost Name[sq]=Privatësia Name[sr]=Приватност Name[sr@Latn]=Приватност Name[sr@ije]=Приватност Name[sr@ijekavianlatin]=Приватност Name[sr@latin]=Приватност Name[sr_RS]=Приватност Name[sr_RS@latin]=Приватност Name[sv]=Sekretess Name[th]=ความเป็นส่วนตัว Name[th_TH]=ความเป็นส่วนตัว Name[tr]=Gizlilik Name[tr_TR]=Gizlilik Name[uk]=Конфіденційність Name[uk_UA]=Конфіденційність Name[ur]=پرائیویسی Name[vi]=Riêng tư Name[vi_VN]=Riêng tư Name[zh_CN]=隐私 Name[zh_HK]=私隱 Name[zh_TW]=隱私 Comment=Cinnamon privacy settings Comment[ar]=خيارات الخصوصية لسينامُن Comment[ast]=Axustes de privacidá Cinnamon Comment[bg]=Настройки за поверителност на Cinnamon Comment[bg_BG]=Настройки за поверителност на Cinnamon Comment[ca]=Ajusts de privadesa de Cinnamon Comment[ca@valencia]=Opcions de privacitat de Cinnamon Comment[ca_ES]=Ajusts de privadesa de Cinnamon Comment[ca_ES@valencia]=Opcions de privacitat de Cinnamon Comment[cs]=Nastevení soukromí v prostředí Cinnamon Comment[cs_CZ]=Nastevení soukromí v prostředí Cinnamon Comment[cy]=Gosodiadau preifatrwydd Cinnamon Comment[da]=Cinnamon-privatlivsindstillinger Comment[da_DK]=Cinnamon-privatlivsindstillinger Comment[de]=Cinnamon-Datenschutzeinstellungen Comment[de_CH]=Cinnamon-Datenschutzeinstellungen Comment[de_DE]=Cinnamon-Datenschutzeinstellungen Comment[el]=Ρυθμίσεις ιδιωτικότητας του Cinnamon Comment[es]=Opciones de privacidad de Cinnamon Comment[es_AR]=Opciones de privacidad de Cinnamon Comment[es_CL]=Opciones de privacidad de Cinnamon Comment[es_CO]=Opciones de privacidad de Cinnamon Comment[es_CR]=Opciones de privacidad de Cinnamon Comment[es_DO]=Opciones de privacidad de Cinnamon Comment[es_EC]=Opciones de privacidad de Cinnamon Comment[es_ES]=Opciones de privacidad de Cinnamon Comment[es_MX]=Opciones de privacidad de Cinnamon Comment[es_NI]=Opciones de privacidad de Cinnamon Comment[es_PA]=Opciones de privacidad de Cinnamon Comment[es_PE]=Opciones de privacidad de Cinnamon Comment[es_PR]=Opciones de privacidad de Cinnamon Comment[es_SV]=Opciones de privacidad de Cinnamon Comment[es_UY]=Opciones de privacidad de Cinnamon Comment[es_VE]=Opciones de privacidad de Cinnamon Comment[eu]=Cinnamon pribatutasunaren ezarpenak Comment[fi]=Cinnamonin tietosuoja-asetukset Comment[fi_FI]=Cinnamonin tietosuoja-asetukset Comment[fr]=Paramètres de confidentialité de Cinnamon Comment[fr_CA]=Paramètres de confidentialité de Cinnamon Comment[fr_FR]=Paramètres de confidentialité de Cinnamon Comment[gd]=Roghainnean prìobhaideachd Cinnamon Comment[gl]=Opciones de intimidade de Cinnamon Comment[gl_ES]=Opciones de intimidade de Cinnamon Comment[hr]=Cinnamon postavke privatnosti Comment[hu]=Cinnamon magánszféra beállítások Comment[hu_HU]=Cinnamon magánszféra beállítások Comment[ia]=Configuration de confidentialitate de Cinnamon Comment[id]=Pengaturan privasi cinnamon Comment[id_ID]=Pengaturan privasi cinnamon Comment[is]=Gagnaleyndarstillingar Cinnamon Comment[it]=Impostazioni privacy di Cinnamon Comment[it_CH]=Impostazioni privacy di Cinnamon Comment[it_IT]=Impostazioni privacy di Cinnamon Comment[ja]=Cinnamon 個人情報設定 Comment[ja_JP]=Cinnamon 個人情報設定 Comment[ko]=시나몬 프라이버시 설정 Comment[ko_KR]=시나몬 프라이버시 설정 Comment[lt]=Cinnamon privatumo nustatymai Comment[lt_LT]=Cinnamon privatumo nustatymai Comment[ms]=Tetapan privasi Cinnamon Comment[ms_MY]=Tetapan privasi Cinnamon Comment[nb]=Personverninnstillinger for Cinnamon Comment[nb_NO]=Personverninnstillinger for Cinnamon Comment[nds]=Cinnamon Privatsphäre Einstellungen Comment[nl]=Instellingen van Cinnamon inzake privéleven Comment[nl_NL]=Instellingen van Cinnamon inzake privéleven Comment[oc]=Paramètres de confidencialitat de Cinnamon Comment[pl]=Ustawienia prywatności Cinnamon Comment[pl_PL]=Ustawienia prywatności Cinnamon Comment[pt]=Configurações de privacidade do Cinnamon Comment[pt_BR]=Configurações de privacidade do Cinnamon Comment[pt_PT]=Configurações de privacidade do Cinnamon Comment[ro]=Setări confidențialitate Cinnamon Comment[ro_RO]=Setări confidențialitate Cinnamon Comment[ru]=Настройки конфиденциальности Cinnamon Comment[sk]=Nastavenia súkromia Cinnamon Comment[sk_SK]=Nastavenia súkromia Cinnamon Comment[sl]=Nastavitve zasebnosti Cinnamona Comment[sl_SI]=Nastavitve zasebnosti Cinnamona Comment[sq]=Parametrat e privatësisë të Cinnamon Comment[sr]=Управљање приватношћу Цимета Comment[sr@Latn]=Управљање приватношћу Цимета Comment[sr@ije]=Управљање приватношћу Цимета Comment[sr@ijekavianlatin]=Управљање приватношћу Цимета Comment[sr@latin]=Управљање приватношћу Цимета Comment[sr_RS]=Управљање приватношћу Цимета Comment[sr_RS@latin]=Управљање приватношћу Цимета Comment[sv]=Cinnamon integritetsinställningar Comment[th]=ค่าตั้งความเป็นส่วนตัวของ Cinnamon Comment[th_TH]=ค่าตั้งความเป็นส่วนตัวของ Cinnamon Comment[tr]=Cinnamon gizlilik ayarları Comment[tr_TR]=Cinnamon gizlilik ayarları Comment[uk]=Налаштування конфіденційности Cinnamon Comment[uk_UA]=Налаштування конфіденційности Cinnamon Comment[ur]=سنامون پرائیویسی کی ترتیبات Comment[vi]=Thiết đặt riêng tư Cinnamon Comment[vi_VN]=Thiết đặt riêng tư Cinnamon Comment[zh_CN]=Cinnamon隐私设置 Comment[zh_HK]=Cinnamon 私隱設定 Comment[zh_TW]=Cinnamon 隱私設定 Keywords=privacy;recent;gtk;private; Keywords[ar]=الخصوصية، الأخيرة، Gtk، خاص; Keywords[ast]=privacidá;apocayá;apocagüéi;gtk;priváu; Keywords[bg]=лично;текущо;gtk;частно; Keywords[bg_BG]=лично;текущо;gtk;частно; Keywords[ca]=privadesa;recent;gtk;privat; Keywords[ca@valencia]=privacitat;recent;gtk;privat; Keywords[ca_ES]=privadesa;recent;gtk;privat; Keywords[ca_ES@valencia]=privacitat;recent;gtk;privat; Keywords[cs]=soukromí;nedávný;gtk;soukromý; Keywords[cs_CZ]=soukromí;nedávný;gtk;soukromý; Keywords[cy]=preifatrwydd;diweddar;gtk;preifat; Keywords[da]=privatliv;seneste;gtk;privat; Keywords[da_DK]=privatliv;seneste;gtk;privat; Keywords[de]=Datenschutz;Privatsphäre;Vertraulichkeit;Geheimhaltung;kürzlich;letzte;neueste;jüngste; Keywords[de_CH]=Datenschutz;Privatsphäre;Vertraulichkeit;Geheimhaltung;kürzlich;letzte;neueste;jüngste; Keywords[de_DE]=Datenschutz;Privatsphäre;Vertraulichkeit;Geheimhaltung;kürzlich;letzte;neueste;jüngste; Keywords[el]=ιδιωτικότητα;πρόσφατο;gtk;ιδιωτικό; Keywords[es]=privacidad;reciente;gtk;privado; Keywords[es_AR]=privacidad;reciente;gtk;privado; Keywords[es_CL]=privacidad;reciente;gtk;privado; Keywords[es_CO]=privacidad;reciente;gtk;privado; Keywords[es_CR]=privacidad;reciente;gtk;privado; Keywords[es_DO]=privacidad;reciente;gtk;privado; Keywords[es_EC]=privacidad;reciente;gtk;privado; Keywords[es_ES]=privacidad;reciente;gtk;privado; Keywords[es_MX]=privacidad;reciente;gtk;privado; Keywords[es_NI]=privacidad;reciente;gtk;privado; Keywords[es_PA]=privacidad;reciente;gtk;privado; Keywords[es_PE]=privacidad;reciente;gtk;privado; Keywords[es_PR]=privacidad;reciente;gtk;privado; Keywords[es_SV]=privacidad;reciente;gtk;privado; Keywords[es_UY]=privacidad;reciente;gtk;privado; Keywords[es_VE]=privacidad;reciente;gtk;privado; Keywords[eu]=pribatutasuna;azkenak;gtk;pribatua; Keywords[fi]=yksityisyys;viimeaikaiset;gtk;yksityinen; Keywords[fi_FI]=yksityisyys;viimeaikaiset;gtk;yksityinen; Keywords[fr]=confidentialité;récent;gtk;privé; Keywords[fr_CA]=confidentialité;récent;gtk;privé; Keywords[fr_FR]=confidentialité;récent;gtk;privé; Keywords[gd]=privacy;recent;gtk;private;prìobhaideahcd;o chionn goirid;prìobhaideach; Keywords[gl]=intimidade;recente;gtk;privado; Keywords[gl_ES]=intimidade;recente;gtk;privado; Keywords[hr]=privatnost;nedavno;gtk;privatno; Keywords[hu]=magánszféra;legutóbbi;gtk;magán; Keywords[hu_HU]=magánszféra;legutóbbi;gtk;magán; Keywords[ia]=confidentialitate;recente;gtk;private; Keywords[id]=privasi;baru-baru ini;gtk;pribadi; Keywords[id_ID]=privasi;baru-baru ini;gtk;pribadi; Keywords[is]=friðhelgi;persónulegt;einka;gagnaleynd;gtk; Keywords[it]=privacy;recenti;gtk;privato; Keywords[it_CH]=privacy;recenti;gtk;privato; Keywords[it_IT]=privacy;recenti;gtk;privato; Keywords[ko]=프라이버시;최근;gtk;비공개; Keywords[ko_KR]=프라이버시;최근;gtk;비공개; Keywords[lt]=privatumas;paskiausi;gtk;privatu; Keywords[lt_LT]=privatumas;paskiausi;gtk;privatu; Keywords[ms]=Privasi;baru-baru ini;gtk;peribadi; Keywords[ms_MY]=Privasi;baru-baru ini;gtk;peribadi; Keywords[nb]=personvern;nylig;gtk;privat; Keywords[nb_NO]=personvern;nylig;gtk;privat; Keywords[nds]=Datenschutz;kürzlich erfolgt;gtk;Privat; Keywords[nl]=privéleven;onlangs;gtk;privé; Keywords[nl_NL]=privéleven;onlangs;gtk;privé; Keywords[pl]=prywatność;ostatnie;gtk;prywatny; Keywords[pl_PL]=prywatność;ostatnie;gtk;prywatny; Keywords[pt]=privacidade;recente;gtk;privado; Keywords[pt_BR]=privacidade;recente;gtk;privado; Keywords[pt_PT]=privacidade;recente;gtk;privado; Keywords[ro]=confidențialitate;recent;gtk;confidențial; Keywords[ro_RO]=confidențialitate;recent;gtk;confidențial; Keywords[ru]=конфиденциальность;недавние;gtk;приватность; Keywords[sk]=súkromie;nedávno otvorené;gtk;súkromné; Keywords[sk_SK]=súkromie;nedávno otvorené;gtk;súkromné; Keywords[sl]=zasebnost;nedavno;gtk;zasebno; Keywords[sl_SI]=zasebnost;nedavno;gtk;zasebno; Keywords[sq]=privatësia;të fundit;gtk;privat; Keywords[sr]=приватност;скорашње;гтк;мир; Keywords[sr@Latn]=приватност;скорашње;гтк;мир; Keywords[sr@ije]=приватност;скорашње;гтк;мир; Keywords[sr@ijekavianlatin]=приватност;скорашње;гтк;мир; Keywords[sr@latin]=приватност;скорашње;гтк;мир; Keywords[sr_RS]=приватност;скорашње;гтк;мир; Keywords[sr_RS@latin]=приватност;скорашње;гтк;мир; Keywords[sv]=integritet;senaste;gtk;privat; Keywords[th]=ความเป็นส่วนบุคคล;ล่าสุด;gtk;ส่วนบุคคล; Keywords[th_TH]=ความเป็นส่วนบุคคล;ล่าสุด;gtk;ส่วนบุคคล; Keywords[tr]=gizlilik;son dosyalar;gtk;özel; Keywords[tr_TR]=gizlilik;son dosyalar;gtk;özel; Keywords[uk]=конфіденційність;останні;GTK;приватне; Keywords[uk_UA]=конфіденційність;останні;GTK;приватне; Keywords[ur]=پرائیوسی، حالیہ، جی ٹی کے، پرائیویٹ، نجی; Keywords[vi]=riêng tư;gần đây;gtk;riêng tư; Keywords[vi_VN]=riêng tư;gần đây;gtk;riêng tư; Keywords[zh_CN]=隐私,最近,gtk,个人; Keywords[zh_HK]=私隱;最近;GTK;私人; Keywords[zh_TW]=隱私;最近;GTK;私人; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-mouse.desktop0000664000175000017500000004402513215735076026117 0ustar fabiofabio[Desktop Entry] Icon=cs-mouse Exec=cinnamon-settings mouse Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Mouse and Touchpad Name[am]=አይጥ እና ተችፓድ Name[ar]=الفأرة ولوحة اللمس Name[ast]=Mur y touchpad Name[be]=Мыш i сэнсарная панэль Name[be@latin]=Мыш i сэнсарная панэль Name[be_BY]=Мыш i сэнсарная панэль Name[bg]=Мишка и сензорен панел Name[bg_BG]=Мишка и сензорен панел Name[bs]=Miš i površina osjetljiva na dodir Name[ca]=Ratolí i ratolí tàctil Name[ca@valencia]=Ratolí i ratolí tàctil Name[ca_ES]=Ratolí i ratolí tàctil Name[ca_ES@valencia]=Ratolí i ratolí tàctil Name[cs]=Myš a touchpad Name[cs_CZ]=Myš a touchpad Name[cy]=Llygoden a Phad Cyffwrdd Name[da]=Mus og touchpad Name[da_DK]=Mus og touchpad Name[de]=Maus und Touchpad Name[de_CH]=Maus und Touchpad Name[de_DE]=Maus und Touchpad Name[el]=Ποντίκι και Επιφάνεια Αφής Name[eo]=Muso kaj tuŝplato Name[es]=Ratón y ratón táctil Name[es_AR]=Ratón y ratón táctil Name[es_CL]=Ratón y ratón táctil Name[es_CO]=Ratón y ratón táctil Name[es_CR]=Ratón y ratón táctil Name[es_DO]=Ratón y ratón táctil Name[es_EC]=Ratón y ratón táctil Name[es_ES]=Ratón y ratón táctil Name[es_MX]=Ratón y ratón táctil Name[es_NI]=Ratón y ratón táctil Name[es_PA]=Ratón y ratón táctil Name[es_PE]=Ratón y ratón táctil Name[es_PR]=Ratón y ratón táctil Name[es_SV]=Ratón y ratón táctil Name[es_UY]=Ratón y ratón táctil Name[es_VE]=Ratón y ratón táctil Name[et]=Hiir ja puuteplaat Name[et_EE]=Hiir ja puuteplaat Name[eu]=Sagua eta ukipen-teklatua Name[fi]=Hiiri ja kosketuslevy Name[fi_FI]=Hiiri ja kosketuslevy Name[fr]=Souris et pavé tactile Name[fr_CA]=Souris et pavé tactile Name[fr_FR]=Souris et pavé tactile Name[ga]=Luch agus Ceap Tadhaill Name[gd]=An luchag is am pada-suathaidh Name[gl]=Rato e área táctil Name[gl_ES]=Rato e área táctil Name[hr]=Miš i touchpad Name[hu]=Egér és érintőtábla Name[hu_HU]=Egér és érintőtábla Name[ia]=Mus e pannello tactile Name[id]=Mouse dan Touchpad Name[id_ID]=Mouse dan Touchpad Name[is]=Mús og snertiplatti Name[it]=Mouse e touchpad Name[it_CH]=Mouse e touchpad Name[it_IT]=Mouse e touchpad Name[ja]=マウスとタッチパッド Name[ja_JP]=マウスとタッチパッド Name[ko]=마우스와 터치패드 Name[ko_KR]=마우스와 터치패드 Name[lt]=Pelė ir jutiklinis kilimėlis Name[lt_LT]=Pelė ir jutiklinis kilimėlis Name[lv]=Pele un skārienpaliktnis Name[lv_LV]=Pele un skārienpaliktnis Name[ms]=Tetikus dan Pad Sentuh Name[ms_MY]=Tetikus dan Pad Sentuh Name[nb]=Mus og styreplate Name[nb_NO]=Mus og styreplate Name[nds]=Maus und Touchpad Name[nl]=Muis en touchpad Name[nl_NL]=Muis en touchpad Name[oc]=Mirga e pavat tactil Name[om]=Hantuutee fi touchpad Name[pa]=ਮਾਊਸ ਤੇ ਟੱਚਪੈਚ Name[pl]=Mysz i panel dotykowy Name[pl_PL]=Mysz i panel dotykowy Name[pt]=Rato e painel de toque Name[pt_BR]=Mouse e Touchpad Name[pt_PT]=Rato e painel de toque Name[ro]=Mouse și touchpad Name[ro_RO]=Mouse și touchpad Name[ru]=Мышь и сенсорная панель Name[sk]=Myš a touchpad Name[sk_SK]=Myš a touchpad Name[sl]=Miška in sledilna ploščica Name[sl_SI]=Miška in sledilna ploščica Name[sr]=Миш и додирна плочица Name[sr@Latn]=Миш и додирна плочица Name[sr@ije]=Миш и додирна плочица Name[sr@ijekavianlatin]=Миш и додирна плочица Name[sr@latin]=Миш и додирна плочица Name[sr_RS]=Миш и додирна плочица Name[sr_RS@latin]=Миш и додирна плочица Name[sv]=Mus och pekplatta Name[ta]=சொடுக்கி மற்றும் தொடுதிட்டு Name[ta_LK]=சொடுக்கி மற்றும் தொடுதிட்டு Name[tg]=Муш ва панели ламсӣ Name[th]=เมาส์และทัชแพด Name[th_TH]=เมาส์และทัชแพด Name[tr]=Fare ve Dokunmatik Panel Name[tr_TR]=Fare ve Dokunmatik Panel Name[uk]=Миша та сенсорна панель Name[uk_UA]=Миша та сенсорна панель Name[ur]=ماؤس اور ٹچ پیڈ Name[vi]=Chuột và Bàn chạm chuột Name[vi_VN]=Chuột và Bàn chạm chuột Name[zh_CN]=鼠标和触摸板 Name[zh_HK]=滑鼠和觸控板 Name[zh_TW]=滑鼠與觸控板 Comment=Control mouse and touchpad settings Comment[am]=የ አይጥ እና የ ተችፓድ ማሰናጃ መቆጣጠሪያ Comment[ar]=التحكم في خصائص الفأرة ولوحة اللمس Comment[be]=Налада мышы і сэнсарнай панэлі Comment[be@latin]=Налада мышы і сэнсарнай панэлі Comment[be_BY]=Налада мышы і сэнсарнай панэлі Comment[bg]=Контрол на мишката и настройки на тъчпада Comment[bg_BG]=Контрол на мишката и настройки на тъчпада Comment[bs]=Kontrole miša i površina osjetljiva na dodir Comment[ca]=Ajusts de ratolí i ratolí tàctil Comment[ca@valencia]=Configuració de ratolí i ratolí tàctil Comment[ca_ES]=Ajusts de ratolí i ratolí tàctil Comment[ca_ES@valencia]=Configuració de ratolí i ratolí tàctil Comment[cs]=Nastavení myši a touchpadu Comment[cs_CZ]=Nastavení myši a touchpadu Comment[cy]=Gosodiadau rheoli llygoden a phad cyffwrdd Comment[da]=Kontrollér muse- og touchpadindstillinger Comment[da_DK]=Kontrollér muse- og touchpadindstillinger Comment[de]=Maus- und Touchpad-Einstellungen verwalten Comment[de_CH]=Maus- und Touchpad-Einstellungen verwalten Comment[de_DE]=Maus- und Touchpad-Einstellungen verwalten Comment[el]=Ρυθμίστε το ποντίκι και την επιφάνεια αφής Comment[es]=Configuración de ratón y ratón táctil Comment[es_AR]=Configuración de ratón y ratón táctil Comment[es_CL]=Configuración de ratón y ratón táctil Comment[es_CO]=Configuración de ratón y ratón táctil Comment[es_CR]=Configuración de ratón y ratón táctil Comment[es_DO]=Configuración de ratón y ratón táctil Comment[es_EC]=Configuración de ratón y ratón táctil Comment[es_ES]=Configuración de ratón y ratón táctil Comment[es_MX]=Configuración de ratón y ratón táctil Comment[es_NI]=Configuración de ratón y ratón táctil Comment[es_PA]=Configuración de ratón y ratón táctil Comment[es_PE]=Configuración de ratón y ratón táctil Comment[es_PR]=Configuración de ratón y ratón táctil Comment[es_SV]=Configuración de ratón y ratón táctil Comment[es_UY]=Configuración de ratón y ratón táctil Comment[es_VE]=Configuración de ratón y ratón táctil Comment[eu]=Kontrolatu sagua eta ukipen-teklatuaren ezarpenak Comment[fi]=Muuta hiiren ja kosketuslevyn asetuksia Comment[fi_FI]=Muuta hiiren ja kosketuslevyn asetuksia Comment[fr]=Paramètres de contrôle de la souris et du pavé tactile Comment[fr_CA]=Contrôler les paramètres de la souris et du pavé tactile Comment[fr_FR]=Paramètres de contrôle de la souris et du pavé tactile Comment[gd]=Stiùirich roghainnean na luchaige 's a' phada-shuathaidh Comment[gl]=Controla os axustes do rato e da área táctil Comment[gl_ES]=Controla os axustes do rato e da área táctil Comment[hr]=Upravljajte mišem i touchpad postavkama Comment[hu]=Egér és érintőtábla beállítások Comment[hu_HU]=Egér és érintőtábla beállítások Comment[ia]=Controlar le preferentias del mus e del pannello tactile Comment[id]=Atur pengaturan mouse dan touchpad Comment[id_ID]=Atur pengaturan mouse dan touchpad Comment[is]=Sýsla með stillingar músa og snertiplatta Comment[it]=Impostazioni mouse e touchpad Comment[it_CH]=Impostazioni mouse e touchpad Comment[it_IT]=Impostazioni mouse e touchpad Comment[ja]=マウス・タットパッド設定管理 Comment[ja_JP]=マウス・タットパッド設定管理 Comment[ko]=마우스와 터치패드 설정 Comment[ko_KR]=마우스와 터치패드 설정 Comment[lt]=Valdyti pelės ir jutiklinio kilimėlio nustatymus Comment[lt_LT]=Valdyti pelės ir jutiklinio kilimėlio nustatymus Comment[lv]=Vadīt peles un skārienpalikņa iestatījumus Comment[lv_LV]=Vadīt peles un skārienpalikņa iestatījumus Comment[ms]=Tetapan kawalan tetikus dan pad sesentuh Comment[ms_MY]=Tetapan kawalan tetikus dan pad sesentuh Comment[nb]=Håndter mus- og styreplateinnstillinger Comment[nb_NO]=Håndter mus- og styreplateinnstillinger Comment[nds]=Maus und Touchpad-Einstellungen bearbeiten Comment[nl]=Muis- en touchpadinstellingen beheren Comment[nl_NL]=Muis- en touchpadinstellingen beheren Comment[pl]=Kontroluj ustawienia myszki i panelu dotykowego Comment[pl_PL]=Kontroluj ustawienia myszki i panelu dotykowego Comment[pt]=Controlar as definições de rato e touchpad Comment[pt_BR]=Controlar as configurações de mouse e touchpad Comment[pt_PT]=Controlar as definições de rato e touchpad Comment[ro]=Gestionează setările mouse-ului și touchpadului Comment[ro_RO]=Gestionează setările mouse-ului și touchpadului Comment[ru]=Настройка мыши и сенсорной панели Comment[sk]=Kontrolovať nastavenia myši a touchpadu Comment[sk_SK]=Kontrolovať nastavenia myši a touchpadu Comment[sl]=Upravljajte z nastavitvami miške in drsne ploščice Comment[sl_SI]=Upravljajte z nastavitvami miške in drsne ploščice Comment[sr]=Управљање поставкама миша и додирне плочице Comment[sr@Latn]=Управљање поставкама миша и додирне плочице Comment[sr@ije]=Управљање поставкама миша и додирне плочице Comment[sr@ijekavianlatin]=Управљање поставкама миша и додирне плочице Comment[sr@latin]=Управљање поставкама миша и додирне плочице Comment[sr_RS]=Управљање поставкама миша и додирне плочице Comment[sr_RS@latin]=Управљање поставкама миша и додирне плочице Comment[sv]=Hantera inställningar för mus och pekplatta Comment[tg]=Идоракунии танзимоти муш ва панели ламсӣ Comment[th]=ควบคุมการตั้งค่าเมาส์และทัชแพด Comment[th_TH]=ควบคุมการตั้งค่าเมาส์และทัชแพด Comment[tr]=Fare ve dokunmatik panel ayarlarını kontrol et Comment[tr_TR]=Fare ve dokunmatik panel ayarlarını kontrol et Comment[uk]=Керування налаштуваннями миші і тачпаду Comment[uk_UA]=Керування налаштуваннями миші і тачпаду Comment[ur]=ماؤس اور ٹچ پیڈ کی ترتیبات معین کریں Comment[vi]=Điều khiển thiết đặt chuột và bàn chạm Comment[vi_VN]=Điều khiển thiết đặt chuột và bàn chạm Comment[zh_CN]=鼠标/触摸板设置 Comment[zh_HK]=控制滑鼠和觸控板設定 Comment[zh_TW]=管理滑鼠與觸控板設定 Keywords=mouse;touchpad;synaptic;double-click; Keywords[am]=አይጥ ተችፓድ ሲናፕቲክ ሁለት ጊዜ-መጫኛ; Keywords[ar]=فأرة ، لوحة اللمس ، المتشابك، نقر مزدوج; Keywords[ast]=mur;touchpad;synaptic;clic doblu;duble clic;doblu clic;clic duble; Keywords[be]=мыш;сэнсарная панэль;synaptic;падвоены націск; Keywords[be@latin]=мыш;сэнсарная панэль;synaptic;падвоены націск; Keywords[be_BY]=мыш;сэнсарная панэль;synaptic;падвоены націск; Keywords[bg]=мишка;сензорен панел;synaptic;двоен клик; Keywords[bg_BG]=мишка;сензорен панел;synaptic;двоен клик; Keywords[bs]=miš;površina osjetljiva na dodir;synaptic;dvostruki klik; Keywords[ca]=ratolí;ratolí tàctil;synaptic;doble clic; Keywords[ca@valencia]=ratolí;ratolí tàctil;synaptic;doble clic; Keywords[ca_ES]=ratolí;ratolí tàctil;synaptic;doble clic; Keywords[ca_ES@valencia]=ratolí;ratolí tàctil;synaptic;doble clic; Keywords[cs]=myš;touchpad;synaptic;dvojklik; Keywords[cs_CZ]=myš;touchpad;synaptic;dvojklik; Keywords[cy]=llygoden;pad cyffwrdd;synaptig;clic dwbl; Keywords[da]=mus;touchpad;synaptic;dobbeltklik; Keywords[da_DK]=mus;touchpad;synaptic;dobbeltklik; Keywords[de]=Maus;Touchpad;Synaptic;Doppelklick; Keywords[de_CH]=Maus;Touchpad;Synaptic;Doppelklick; Keywords[de_DE]=Maus;Touchpad;Synaptic;Doppelklick; Keywords[el]=ποντίκι;επιφάνεια αφής;synaptic;διπλό κλικ; Keywords[es]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_AR]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_CL]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_CO]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_CR]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_DO]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_EC]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_ES]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_MX]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_NI]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_PA]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_PE]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_PR]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_SV]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_UY]=ratón;ratón táctil;synaptic;doble clic; Keywords[es_VE]=ratón;ratón táctil;synaptic;doble clic; Keywords[eu]=sagua;ukipen-teklatua;synaptic;klik bikoitza; Keywords[fi]=hiiri;kosketuslevy;synaptic;tuplaklikkaus; Keywords[fi_FI]=hiiri;kosketuslevy;synaptic;tuplaklikkaus; Keywords[fr]=souris;pavé tactile;synaptic;double clic; Keywords[fr_CA]=souris;pavé tactile;synaptic;double-clic; Keywords[fr_FR]=souris;pavé tactile;synaptic;double clic; Keywords[ga]=luch;ceap tadhaill;sionapsach;déchliceáil; Keywords[gd]=luchag;pada-suathaidh;synaptic;briogadh dùbailte;mouse;touchpad;double-click; Keywords[gl]=rato;área táctil;synaptic;dobre clic; Keywords[gl_ES]=rato;área táctil;synaptic;dobre clic; Keywords[hr]=miš;touchpad;synaptic;dvostruki-klik; Keywords[hu]=egér;érintőtábla;synaptic;dupla kattintás; Keywords[hu_HU]=egér;érintőtábla;synaptic;dupla kattintás; Keywords[ia]=mus;pannello tactile;synaptic;clic duple; Keywords[id]=mouse;touchpad;sinaptik;klik ganda; Keywords[id_ID]=mouse;touchpad;sinaptik;klik ganda; Keywords[is]=mús;bendill;snertiplatti;synaptic;tvísmella; Keywords[it]=mouse;touchpad;synaptic;doppio clic; Keywords[it_CH]=mouse;touchpad;synaptic;doppio clic; Keywords[it_IT]=mouse;touchpad;synaptic;doppio clic; Keywords[ja]=マウス、タッチパッド、synaptic、ダブルクリック; Keywords[ja_JP]=マウス、タッチパッド、synaptic、ダブルクリック; Keywords[ko]=마우스;터치패드;시냅틱;더블 클릭; Keywords[ko_KR]=마우스;터치패드;시냅틱;더블 클릭; Keywords[lt]=pelė;synaptic;dvigubas paspaudimas; Keywords[lt_LT]=pelė;synaptic;dvigubas paspaudimas; Keywords[lv]=pele;skārienpaliktnis;sinaptiskais;dubultklikšķis; Keywords[lv_LV]=pele;skārienpaliktnis;sinaptiskais;dubultklikšķis; Keywords[ms]=tetikus;pad sentuh;synaptic;dwi-klik; Keywords[ms_MY]=tetikus;pad sentuh;synaptic;dwi-klik; Keywords[nb]=mus;styreplate;synaptic;dobbel-klikk; Keywords[nb_NO]=mus;styreplate;synaptic;dobbel-klikk; Keywords[nds]=Maus;Touchpad;Synaptic;Doppelklick; Keywords[nl]=muis;touchpad;aanraakveld;dubbelklik; Keywords[nl_NL]=muis;touchpad;aanraakveld;dubbelklik; Keywords[pl]=mysz;panel dotykowy;synaptic;podwójne kliknięcie; Keywords[pl_PL]=mysz;panel dotykowy;synaptic;podwójne kliknięcie; Keywords[pt]=rato;painel de toque;synaptic;dois cliques; Keywords[pt_BR]=mouse;touchpad;synaptic;clique duplo; Keywords[pt_PT]=rato;painel de toque;synaptic;dois cliques; Keywords[ro]=mouse;touchpad;synaptic;clic dublu; Keywords[ro_RO]=mouse;touchpad;synaptic;clic dublu; Keywords[ru]=мышь;сенсорная панель;synaptic;двойное нажатие; Keywords[sk]=myš;touchpad;synaptic;dvojklik; Keywords[sk_SK]=myš;touchpad;synaptic;dvojklik; Keywords[sl]=miška;sledilna ploščica;synaptic;dvojni klik; Keywords[sl_SI]=miška;sledilna ploščica;synaptic;dvojni klik; Keywords[sr]=миш;додирна плочица;синаптик;двоклик; Keywords[sr@Latn]=миш;додирна плочица;синаптик;двоклик; Keywords[sr@ije]=миш;додирна плочица;синаптик;двоклик; Keywords[sr@ijekavianlatin]=миш;додирна плочица;синаптик;двоклик; Keywords[sr@latin]=миш;додирна плочица;синаптик;двоклик; Keywords[sr_RS]=миш;додирна плочица;синаптик;двоклик; Keywords[sr_RS@latin]=миш;додирна плочица;синаптик;двоклик; Keywords[sv]=mus;pekplatta;synaptic;dubbelklick; Keywords[ta]=சுட்டி;தொடுமேடை;சினாப்டிக்;இரட்டைச் சொடுக்கு; Keywords[ta_LK]=சுட்டி;தொடுமேடை;சினாப்டிக்;இரட்டைச் சொடுக்கு; Keywords[tg]=муш;панели ламсӣ;synaptic;зеркунии дубора; Keywords[th]=เมาส์;ทัชแพด;ไซนัปติก;คลิกสองครั้ง; Keywords[th_TH]=เมาส์;ทัชแพด;ไซนัปติก;คลิกสองครั้ง; Keywords[tr]=fare;dokunmatik panel;synaptic;çift-tıklama; Keywords[tr_TR]=fare;dokunmatik panel;synaptic;çift-tıklama; Keywords[uk]=миша;сенсорна панель;synaptic;подвійне натискання; Keywords[uk_UA]=миша;сенсорна панель;synaptic;подвійне натискання; Keywords[ur]=ماؤس، ٹچ پیڈ، سائنپٹک، دوہرا-کلک، ڈبل کلک; Keywords[vi]=chuột;bàn chạm chuột;synaptic;nhấp đúp; Keywords[vi_VN]=chuột;bàn chạm chuột;synaptic;nhấp đúp; Keywords[zh_CN]=mouse;touchpad;synaptic;double-click;鼠标;触摸板;新思;双击; Keywords[zh_HK]=滑鼠;觸控板;synaptic;連按兩下; Keywords[zh_TW]=滑鼠;觸控板;synaptic;雙擊; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-power.desktop0000664000175000017500000005047513215735076026131 0ustar fabiofabio[Desktop Entry] Icon=cs-power Exec=cinnamon-settings power Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Power Management Name[am]=የሐይል አስተዳዳሪ Name[ar]=إدارة الطاقة Name[ast]=Alministración d'enerxía Name[be]=Кіраваньне сілкаваннем Name[be@latin]=Кіраваньне сілкаваннем Name[be_BY]=Кіраваньне сілкаваннем Name[bg]=Управление на захранването Name[bg_BG]=Управление на захранването Name[bs]=Upravljanje napajanjem Name[ca]=Gestió de l'energia Name[ca@valencia]=Gestió d'energia Name[ca_ES]=Gestió de l'energia Name[ca_ES@valencia]=Gestió d'energia Name[cs]=Správa napájení Name[cs_CZ]=Správa napájení Name[cy]=Rheoli Pŵer Name[da]=Strømstyring Name[da_DK]=Strømstyring Name[de]=Energieverwaltung Name[de_CH]=Energieverwaltung Name[de_DE]=Energieverwaltung Name[el]=Διαχείριση Ενέργειας Name[eo]=Energia administrado Name[es]=Gestión de energía Name[es_AR]=Gestión de energía Name[es_CL]=Gestión de energía Name[es_CO]=Gestión de energía Name[es_CR]=Gestión de energía Name[es_DO]=Gestión de energía Name[es_EC]=Gestión de energía Name[es_ES]=Gestión de energía Name[es_MX]=Gestión de energía Name[es_NI]=Gestión de energía Name[es_PA]=Gestión de energía Name[es_PE]=Gestión de energía Name[es_PR]=Gestión de energía Name[es_SV]=Gestión de energía Name[es_UY]=Gestión de energía Name[es_VE]=Gestión de energía Name[et]=Toitehaldus Name[et_EE]=Toitehaldus Name[eu]=Energia-kudeaketa Name[fa]=مدیریت نیرو Name[fa_AF]=مدیریت نیرو Name[fa_IR]=مدیریت نیرو Name[fi]=Virranhallinta Name[fi_FI]=Virranhallinta Name[fr]=Gestion d'alimentation Name[fr_CA]=Gestion de Courant Name[fr_FR]=Gestion d'alimentation Name[ga]=Bainisteoireacht Cumhachta Name[gd]=Stiùireadh na cumhachd Name[gl]=Xestión da enerxía Name[gl_ES]=Xestión da enerxía Name[he]=צריכת חשמל Name[he_IL]=צריכת חשמל Name[hr]=Upravljanje energijom Name[hu]=Energiakezelő Name[hu_HU]=Energiakezelő Name[ia]=Gestion del energia Name[id]=Manajemen Daya Name[id_ID]=Manajemen Daya Name[is]=Aflstjórnun Name[it]=Gestione dell'alimentazione Name[it_CH]=Gestione dell'alimentazione Name[it_IT]=Gestione dell'alimentazione Name[ja]=電源管理 Name[ja_JP]=電源管理 Name[ko]=전원 관리 Name[ko_KR]=전원 관리 Name[lt]=Energijos valdymas Name[lt_LT]=Energijos valdymas Name[lv]=Barošanas pārvaldība Name[lv_LV]=Barošanas pārvaldība Name[ms]=Pengurusan Kuasa Name[ms_MY]=Pengurusan Kuasa Name[nb]=Strømstyring Name[nb_NO]=Strømstyring Name[nds]=Energieverwaltung Name[nl]=Energiebeheer Name[nl_NL]=Energiebeheer Name[oc]=Gestion de l'alimentacion Name[pa]=ਪਾਵਰ ਪਰਬੰਧ Name[pl]=Zarządzanie energią Name[pl_PL]=Zarządzanie energią Name[pt]=Gestão de energia Name[pt_BR]=Gerenciamento de Energia Name[pt_PT]=Gestão de energia Name[ro]=Administrare consum Name[ro_RO]=Administrare consum Name[ru]=Управление питанием Name[sk]=Správa napájania Name[sk_SK]=Správa napájania Name[sl]=Upravljanje porabe energije Name[sl_SI]=Upravljanje porabe energije Name[sr]=Управљање напајањем Name[sr@Latn]=Управљање напајањем Name[sr@ije]=Управљање напајањем Name[sr@ijekavianlatin]=Управљање напајањем Name[sr@latin]=Управљање напајањем Name[sr_RS]=Управљање напајањем Name[sr_RS@latin]=Управљање напајањем Name[sv]=Strömhantering Name[ta]=மின்சக்தி மேலாண்மை Name[ta_LK]=மின்சக்தி மேலாண்மை Name[tg]=Идоракунии барқ Name[th]=การจัดการพลังงาน Name[th_TH]=การจัดการพลังงาน Name[tr]=Güç Yönetimi Name[tr_TR]=Güç Yönetimi Name[uk]=Керування живленням Name[uk_UA]=Керування живленням Name[ur]=توانائی کا انتظام Name[vi]=Quản lý Điện năng Name[vi_VN]=Quản lý Điện năng Name[zh_CN]=电源管理 Name[zh_HK]=電源管理 Name[zh_TW]=電源管理 Comment=Manage power settings Comment[am]=የ ሐይል ማሰናጃዎች አስተዳዳሪ Comment[ar]=إدارة إعدادات الطاقة Comment[ast]=Axustes del alministrador d'enerxía Comment[be]=Налады сілкавання Comment[be@latin]=Налады сілкавання Comment[be_BY]=Налады сілкавання Comment[bg]=Управление на настройките на захранването Comment[bg_BG]=Управление на настройките на захранването Comment[bs]=Upravljaj podešavanjem napajanja Comment[ca]=Gestioneu els ajusts de l'energia Comment[ca@valencia]=Administra configuració d'energia Comment[ca_ES]=Gestioneu els ajusts de l'energia Comment[ca_ES@valencia]=Administra configuració d'energia Comment[cs]=Správa nastavení napájení Comment[cs_CZ]=Správa nastavení napájení Comment[cy]=Rheoli'r gosodiadau pŵer Comment[da]=Administrér strømstyring Comment[da_DK]=Administrér strømstyring Comment[de]=Energieeinstellungen verwalten Comment[de_CH]=Energieeinstellungen verwalten Comment[de_DE]=Energieeinstellungen verwalten Comment[el]=Διαχείριση ρυθμίσεων ενέργειας Comment[es]=Administrar configuración de energía Comment[es_AR]=Administrar configuración de energía Comment[es_CL]=Administrar configuración de energía Comment[es_CO]=Administrar configuración de energía Comment[es_CR]=Administrar configuración de energía Comment[es_DO]=Administrar configuración de energía Comment[es_EC]=Administrar configuración de energía Comment[es_ES]=Administrar configuración de energía Comment[es_MX]=Administrar configuración de energía Comment[es_NI]=Administrar configuración de energía Comment[es_PA]=Administrar configuración de energía Comment[es_PE]=Administrar configuración de energía Comment[es_PR]=Administrar configuración de energía Comment[es_SV]=Administrar configuración de energía Comment[es_UY]=Administrar configuración de energía Comment[es_VE]=Administrar configuración de energía Comment[eu]=Kudeatu energia-ezarpenak Comment[fi]=Muuta virranhallinnan asetuksia Comment[fi_FI]=Muuta virranhallinnan asetuksia Comment[fr]=Gérer les paramètres d'alimentation Comment[fr_CA]=Gérer les paramètres d'alimentation Comment[fr_FR]=Gérer les paramètres d'alimentation Comment[gd]=Stiùirich roghainnean na cumhachd Comment[gl]=Administra os axustes de enerxía Comment[gl_ES]=Administra os axustes de enerxía Comment[hr]=Upravljajte postavkama energije Comment[hu]=Energiabeállítások kezelése Comment[hu_HU]=Energiabeállítások kezelése Comment[ia]=Gerer le preferentias del energia Comment[id]=Atur pengaturan Power Comment[id_ID]=Atur pengaturan Power Comment[is]=Sýsla með orkusparnaðarstillingar Comment[it]=Gestisci impostazioni alimentazione Comment[it_CH]=Gestisci impostazioni alimentazione Comment[it_IT]=Gestisci impostazioni alimentazione Comment[ja]=電源設定管理 Comment[ja_JP]=電源設定管理 Comment[ko]=전원설정 관리 Comment[ko_KR]=전원설정 관리 Comment[lt]=Tvarkyti energijos nustatymus Comment[lt_LT]=Tvarkyti energijos nustatymus Comment[lv]=Pārvaldīt barošanas iestatījumus Comment[lv_LV]=Pārvaldīt barošanas iestatījumus Comment[ms]=Mengurus tetapan kuasa Comment[ms_MY]=Mengurus tetapan kuasa Comment[nb]=Håndter strømsstyring Comment[nb_NO]=Håndter strømsstyring Comment[nds]=Energieeinstellungen verwalten Comment[nl]=Energie-instellingen beheren Comment[nl_NL]=Energie-instellingen beheren Comment[oc]=Gerir los paramètres d'alimentacion Comment[pl]=Zarządzaj ustawieniami zasilania Comment[pl_PL]=Zarządzaj ustawieniami zasilania Comment[pt]=Gerir as definições de energia Comment[pt_BR]=Gerenciar as configurações de energia Comment[pt_PT]=Gerir as definições de energia Comment[ro]=Gestionează setările consumului Comment[ro_RO]=Gestionează setările consumului Comment[ru]=Настройки питания Comment[sk]=Spravovať nastavenia napájania Comment[sk_SK]=Spravovať nastavenia napájania Comment[sl]=Upravljajte z nastavitvami porabe energije Comment[sl_SI]=Upravljajte z nastavitvami porabe energije Comment[sq]=Menaxhoni parametrat e furnizimit të energjisë Comment[sr]=Управљање поставкама напајања Comment[sr@Latn]=Управљање поставкама напајања Comment[sr@ije]=Управљање поставкама напајања Comment[sr@ijekavianlatin]=Управљање поставкама напајања Comment[sr@latin]=Управљање поставкама напајања Comment[sr_RS]=Управљање поставкама напајања Comment[sr_RS@latin]=Управљање поставкама напајања Comment[sv]=Hantera ströminställningar Comment[tg]=Идоракунии танзимоти барқ Comment[th]=จัดการการตั้งค่าพลังงาน Comment[th_TH]=จัดการการตั้งค่าพลังงาน Comment[tr]=Güç ayarlarını yönet Comment[tr_TR]=Güç ayarlarını yönet Comment[uk]=Керування налаштуваннями живлення Comment[uk_UA]=Керування налаштуваннями живлення Comment[ur]=توانائی کی ترتیبات کا انتظام Comment[vi]=Quản lý thiết đặt năng lượng Comment[vi_VN]=Quản lý thiết đặt năng lượng Comment[zh_CN]=电源管理 Comment[zh_HK]=管理電源設定 Comment[zh_TW]=管理電源設定 Keywords=power;suspend;hibernate;laptop;desktop;brightness;screensaver; Keywords[am]=ሐይል፡ ማገጃ፡ ማስተኛ፡ ላፕቶፕ፡ ዴስክቶፕ፡ ብሩህንርት፡ መመልከቻውን ማዳኛ; Keywords[ar]=طاقة، إسبات، إسبات دائم، محمول، سطح مكتب، إضاءة، شاشة توقف; Keywords[ast]=enerxía;suspensión;ivernación;ivernar;suspender;portátil;escritoriu;rellumu;curiapantalles;pantalla; Keywords[be]=электрасілкаванне;чакаюшчы рэжым;спячы рэжым;ноўтбук;настольны ПК;яркасць;застаўка; Keywords[be@latin]=электрасілкаванне;чакаюшчы рэжым;спячы рэжым;ноўтбук;настольны ПК;яркасць;застаўка; Keywords[be_BY]=электрасілкаванне;чакаюшчы рэжым;спячы рэжым;ноўтбук;настольны ПК;яркасць;застаўка; Keywords[bg]=захранване;приспиване;хиберниране;лаптоп;десктоп;яркост;предпазител на екрана; Keywords[bg_BG]=захранване;приспиване;хиберниране;лаптоп;десктоп;яркост;предпазител на екрана; Keywords[bs]=napajanje;suspenduj;hiberniraj;laptop;desktop;svjetlost;čuvar ekrana; Keywords[ca]=energia;suspendre;hibernar;portàtil;escriptori;brillantor;estalvi de pantalla; Keywords[ca@valencia]=energia;suspendre;hivernar;portàtil;escriptori;brillantor;estalvi de pantalla; Keywords[ca_ES]=energia;suspendre;hibernar;portàtil;escriptori;brillantor;estalvi de pantalla; Keywords[ca_ES@valencia]=energia;suspendre;hivernar;portàtil;escriptori;brillantor;estalvi de pantalla; Keywords[cs]=energie;uspat;hibernovat;laptop;desktop;jas;spořič; Keywords[cs_CZ]=energie;uspat;hibernovat;laptop;desktop;jas;spořič; Keywords[cy]=pŵer;oedi;cysgu;gliniadur;bwrdd gwaith;disgleirdeb;arbedwr sgrin; Keywords[da]=strøm;hvile;dvale;bærbar;stationær;lysstyrke;pauseskærm; Keywords[da_DK]=strøm;hvile;dvale;bærbar;stationær;lysstyrke;pauseskærm; Keywords[de]=power;suspend;hibernate;laptop;desktop;brightness;screensaver;Energie;Bereitschaft;Ruhezustand;Schreibtisch;Helligkeit;Bildschirmschoner; Keywords[de_CH]=power;suspend;hibernate;laptop;desktop;brightness;screensaver;Energie;Bereitschaft;Ruhezustand;Schreibtisch;Helligkeit;Bildschirmschoner; Keywords[de_DE]=power;suspend;hibernate;laptop;desktop;brightness;screensaver;Energie;Bereitschaft;Ruhezustand;Schreibtisch;Helligkeit;Bildschirmschoner; Keywords[el]=ενέργεια;αναστολή;αδρανοποίηση;φορητός υπολογιστής;σταθερός υπολογιστής;φωτεινότητα;προφύλαξη οθόνης; Keywords[es]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_AR]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_CL]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_CO]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_CR]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_DO]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_EC]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_ES]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_MX]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_NI]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_PA]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_PE]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_PR]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_SV]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_UY]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[es_VE]=energía;suspender;hibernar;portátil;escritorio;brillo;salvapantallas; Keywords[eu]=energia;eseki;hibernatu;eramangarria;mahaigainekoa;distira;pantaila-babeslea; Keywords[fi]=virta;valmiustila;lepotila;kannettava;pöytätietokone;näytönsäästäjä; Keywords[fi_FI]=virta;valmiustila;lepotila;kannettava;pöytätietokone;näytönsäästäjä; Keywords[fr]=alimentation;mise en veille;hibernation;ordinateur portable;ordinateur de bureau;luminosité;économiseur d'écran; Keywords[fr_CA]=alimentation;mise en veille;hibernation;ordinateur portable;ordinateur de bureau;luminosité;économiseur d'écran; Keywords[fr_FR]=alimentation;mise en veille;hibernation;ordinateur portable;ordinateur de bureau;luminosité;économiseur d'écran; Keywords[gd]=power;suspend;hibernate;laptop;desktop;brightness;screensaver;cumhachd;dàil;cuir 'na dhàil;geamhraich;geamhrachadh;soilleireachd;sàbhalaiche-sgrìn; Keywords[gl]=enerxia;suspender;hibernar;portátil;escritorio;brillo;protector de pantalla; Keywords[gl_ES]=enerxia;suspender;hibernar;portátil;escritorio;brillo;protector de pantalla; Keywords[hr]=uključi;suspendiraj;hiberniraj;prijenosno računalo;radna površina;osvjetljenje;čuvar zaslona; Keywords[hu]=energia;táp;felfüggesztés;hibernálás;laptop;asztali gép;fényerő;képernyővédő; Keywords[hu_HU]=energia;táp;felfüggesztés;hibernálás;laptop;asztali gép;fényerő;képernyővédő; Keywords[ia]=energia;stato de suspension;hibernar;portabile;scriptorio;brillantia;salva schermo; Keywords[id]=power;suspensi;hibernasi;laptop;desktop;brightness;screensaver; Keywords[id_ID]=power;suspensi;hibernasi;laptop;desktop;brightness;screensaver; Keywords[is]=orka;afl;svæfa;bið;fartölva;rafhlaða;skjáborð;birta;skjáhvíla; Keywords[it]=Accendi;Sospendi;Iberna;Laptop;Desktop;Luminosità;Screensaver; Keywords[it_CH]=Accendi;Sospendi;Iberna;Laptop;Desktop;Luminosità;Screensaver; Keywords[it_IT]=Accendi;Sospendi;Iberna;Laptop;Desktop;Luminosità;Screensaver; Keywords[ko]=전원;대기;잠자기;랩톱;데스크톱;밝기;화면보호기; Keywords[ko_KR]=전원;대기;잠자기;랩톱;데스크톱;밝기;화면보호기; Keywords[lv]=barošanas;apturēt;hibernēt;klēpjdators;darbvirsmas;spilgtums;ekrānsaudzētājs; Keywords[lv_LV]=barošanas;apturēt;hibernēt;klēpjdators;darbvirsmas;spilgtums;ekrānsaudzētājs; Keywords[ms]=Kuasa;gantung;hibernasi;komputer riba;desktop;kecerahan;penjimat skrin; Keywords[ms_MY]=Kuasa;gantung;hibernasi;komputer riba;desktop;kecerahan;penjimat skrin; Keywords[nb]=strøm;hvilemodus;dvalemodus;bærbar;skrivebord;lysstyrke;skjermsparer; Keywords[nb_NO]=strøm;hvilemodus;dvalemodus;bærbar;skrivebord;lysstyrke;skjermsparer; Keywords[nds]=Power;Bereitschaft;Ruhezustand;Laptop;Desktop;Helligkeit;Bildschirmschoner; Keywords[nl]=energie;pauzestand;slaapstand;laptop;bureaucomputer;helderheid;schermbeveiliging; Keywords[nl_NL]=energie;pauzestand;slaapstand;laptop;bureaucomputer;helderheid;schermbeveiliging; Keywords[pl]=zasilanie;uśpienie;hibernacja;laptop;pulpit;jasność;wygaszacz ekranu; Keywords[pl_PL]=zasilanie;uśpienie;hibernacja;laptop;pulpit;jasność;wygaszacz ekranu; Keywords[pt]=energia;suspender;hibernar;portátil;computador de secretária;brilho;protetor de ecrã; Keywords[pt_BR]=energia;suspender;hibernar;laptop;área de trabalho;brilho;protetor de tela; Keywords[pt_PT]=energia;suspender;hibernar;portátil;computador de secretária;brilho;protetor de ecrã; Keywords[ro]=energie;suspendare;hibernare;laptop;desktop;luminozitate;protector de ecran; Keywords[ro_RO]=energie;suspendare;hibernare;laptop;desktop;luminozitate;protector de ecran; Keywords[ru]=питание;ожидание;сон;ноутбук;пк;яркость;заставка; Keywords[sk]=za/vypnúť;uspať;hibernovať;notebook;plocha;jas;šetrič obrazovky; Keywords[sk_SK]=za/vypnúť;uspať;hibernovať;notebook;plocha;jas;šetrič obrazovky; Keywords[sl]=energija;pripravljenost;mirovanje;prenosnik;namizje;svetlost;ohranjevalnik zaslona; Keywords[sl_SI]=energija;pripravljenost;mirovanje;prenosnik;namizje;svetlost;ohranjevalnik zaslona; Keywords[sr]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr@Latn]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr@ije]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr@ijekavianlatin]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr@latin]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr_RS]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sr_RS@latin]=искључи;замрзни;обустави;преносни рачунар;рачунар;осветљење;чувар екрана; Keywords[sv]=ström;vänteläge;viloläge;bärbar dator;bordsdator;ljusstyrka;skärmsläckare; Keywords[tg]=барқ;таваққуф;гибернатсия;лэптоп;мизи корӣ;дурахшонӣ;пардаи экран; Keywords[th]=พลังงาน;พักเครื่อง;จำศีล;แล็ปท็อป;พื้นโต๊ะ;ความสว่าง;โปรแกรมรักษาหน้าจอ; Keywords[th_TH]=พลังงาน;พักเครื่อง;จำศีล;แล็ปท็อป;พื้นโต๊ะ;ความสว่าง;โปรแกรมรักษาหน้าจอ; Keywords[tr]=güç;uyku;askı;dizüstü;masaüstü;parlaklık;ekran koruyucu; Keywords[tr_TR]=güç;uyku;askı;dizüstü;masaüstü;parlaklık;ekran koruyucu; Keywords[uk]=живлення;призупинення;гібернація;ноутбук;стільниця;яскравість;зберігач екрану; Keywords[uk_UA]=живлення;призупинення;гібернація;ноутбук;стільниця;яскравість;зберігач екрану; Keywords[vi]=năng lượng;ngưng;ngủ đông;máy tính xách tay;máy bàn;độ sáng;bảo vệ màn hình; Keywords[vi_VN]=năng lượng;ngưng;ngủ đông;máy tính xách tay;máy bàn;độ sáng;bảo vệ màn hình; Keywords[zh_CN]=电源,待机,休眠,笔记本,台式机,亮度,屏保; Keywords[zh_HK]=電源;暫停;休眠;筆記型電腦;桌上型電腦;亮度;熒幕保護程式; Keywords[zh_TW]=電源;暫停;休眠;筆記型電腦;桌上型電腦;亮度;螢幕保護程式; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-user.desktop0000664000175000017500000004413713215735076025751 0ustar fabiofabio[Desktop Entry] Icon=cs-user Exec=cinnamon-settings user Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Account details Name[am]=የ መግለጫ ዝርዝሮች Name[ar]=تفاصيل الحساب Name[ast]=Detalles de cuenta Name[be]=Дэталі ўліковага запісу Name[be@latin]=Дэталі ўліковага запісу Name[be_BY]=Дэталі ўліковага запісу Name[bg]=Данни за акаунта Name[bg_BG]=Данни за акаунта Name[bs]=Detalji o računu Name[ca]=Detalls del compte Name[ca@valencia]=Detalls del compte Name[ca_ES]=Detalls del compte Name[ca_ES@valencia]=Detalls del compte Name[cs]=Podrobnosti o účtu Name[cs_CZ]=Podrobnosti o účtu Name[cy]=Manylion cyfrif Name[da]=Kontodetaljer Name[da_DK]=Kontodetaljer Name[de]=Kontodetails Name[de_CH]=Kontodetails Name[de_DE]=Kontodetails Name[el]=Λεπτομέρειες λογαριασμού Name[eo]=Kontodetaloj Name[es]=Detalles de cuenta Name[es_AR]=Detalles de cuenta Name[es_CL]=Detalles de cuenta Name[es_CO]=Detalles de cuenta Name[es_CR]=Detalles de cuenta Name[es_DO]=Detalles de cuenta Name[es_EC]=Detalles de cuenta Name[es_ES]=Detalles de cuenta Name[es_MX]=Detalles de cuenta Name[es_NI]=Detalles de cuenta Name[es_PA]=Detalles de cuenta Name[es_PE]=Detalles de cuenta Name[es_PR]=Detalles de cuenta Name[es_SV]=Detalles de cuenta Name[es_UY]=Detalles de cuenta Name[es_VE]=Detalles de cuenta Name[et]=Konto üksikasjad Name[et_EE]=Konto üksikasjad Name[eu]=Kontuaren xehetasunak Name[fi]=Tilin tiedot Name[fi_FI]=Tilin tiedot Name[fr]=Détails du compte Name[fr_CA]=Détails du compte Name[fr_FR]=Détails du compte Name[fy]=Akkount details Name[gd]=Mion-fhiosrachadh a' chunntais Name[gl]=Detalles da conta Name[gl_ES]=Detalles da conta Name[hr]=Pojedinosti računa Name[hu]=Fiók részletek Name[hu_HU]=Fiók részletek Name[ia]=Detalios del conto Name[id]=Detail akun Name[id_ID]=Detail akun Name[is]=Nánar um notanda Name[it]=Dettagli dell'account Name[it_CH]=Dettagli dell'account Name[it_IT]=Dettagli dell'account Name[ja]=アカウントの詳細 Name[ja_JP]=アカウントの詳細 Name[ko]=사용자 정보 Name[ko_KR]=사용자 정보 Name[lt]=Paskyros informacija Name[lt_LT]=Paskyros informacija Name[lv]=Detalizēta informācija par kontu Name[lv_LV]=Detalizēta informācija par kontu Name[ms]=Perincian akaun Name[ms_MY]=Perincian akaun Name[nb]=Kontodetaljer Name[nb_NO]=Kontodetaljer Name[nds]=Konto - Einzelheiten Name[nl]=Accountdetails Name[nl_NL]=Accountdetails Name[oc]=Informacions del compte Name[om]=Eenyummeessaa baldhaa Name[pa]=ਅਕਾਊਂਟ ਵੇਰਵਾ Name[pl]=Szczegóły konta Name[pl_PL]=Szczegóły konta Name[pt]=Detalhes da conta Name[pt_BR]=Detalhes da Conta Name[pt_PT]=Detalhes da conta Name[ro]=Detalii cont Name[ro_RO]=Detalii cont Name[ru]=Детали учётной записи Name[sk]=Podrobnosti o účte Name[sk_SK]=Podrobnosti o účte Name[sl]=Podrobnosti računa Name[sl_SI]=Podrobnosti računa Name[sq]=Detajet e llogarisë Name[sr]=Детаљи о налогу Name[sr@Latn]=Детаљи о налогу Name[sr@ije]=Детаљи о налогу Name[sr@ijekavianlatin]=Детаљи о налогу Name[sr@latin]=Детаљи о налогу Name[sr_RS]=Детаљи о налогу Name[sr_RS@latin]=Детаљи о налогу Name[sv]=Kontodetaljer Name[ta]=கணக்கு விவரங்கள் Name[ta_LK]=கணக்கு விவரங்கள் Name[tg]=Тафсилоти ҳисоб Name[th]=รายละเอียดบัญชีผู้ใช้ Name[th_TH]=รายละเอียดบัญชีผู้ใช้ Name[tr]=Hesap Ayrıntıları Name[tr_TR]=Hesap Ayrıntıları Name[uk]=Дані обліковки Name[uk_UA]=Дані обліковки Name[ur]=کھاتے کی تفصیلات دکھائیں Name[vi]=Chi tiết tài khoản Name[vi_VN]=Chi tiết tài khoản Name[zh_CN]=帐户详情 Name[zh_HK]=帳號詳細資料 Name[zh_TW]=帳號詳細資訊 Comment=Change your user preferences and password Comment[am]=የ እርስዎን የመጠቀሚያ ምርጫዎች እና የመግቢያ ቃል መቀየሪያ Comment[ar]=غيّر خيارات المستخدم وكلمة المرور Comment[ast]=Camuda les tos preferencies d'usuariu y contraseña Comment[be]=Змяніць карыстальніцкія налады і пароль Comment[be@latin]=Змяніць карыстальніцкія налады і пароль Comment[be_BY]=Змяніць карыстальніцкія налады і пароль Comment[bg]=Променете Вашите потребителски настройки и парола Comment[bg_BG]=Променете Вашите потребителски настройки и парола Comment[bs]=Promijeni korisničke postavke i šifru Comment[ca]=Canviar les preferències d'usuari i la contrasenya Comment[ca@valencia]=Canvia les preferències d'usuari i contrasenya Comment[ca_ES]=Canviar les preferències d'usuari i la contrasenya Comment[ca_ES@valencia]=Canvia les preferències d'usuari i contrasenya Comment[cs]=Změnit nastavení uživatele a hesla Comment[cs_CZ]=Změnit nastavení uživatele a hesla Comment[cy]=Newid eich dewisiadau defnyddiwr a chyfrinair Comment[da]=Ændr dine brugerindstillinger og din adgangskode Comment[da_DK]=Ændr dine brugerindstillinger og din adgangskode Comment[de]=Benutzereinstellungen und Passwort ändern Comment[de_CH]=Benutzereinstellungen und Passwort ändern Comment[de_DE]=Benutzereinstellungen und Passwort ändern Comment[el]=Αλλάξτε τις προτιμήσεις χρήστη σας και τον κωδικό πρόσβασης Comment[es]=Cambiar las preferencias de usuario y contraseña Comment[es_AR]=Cambiar las preferencias de usuario y contraseña Comment[es_CL]=Cambiar las preferencias de usuario y contraseña Comment[es_CO]=Cambiar las preferencias de usuario y contraseña Comment[es_CR]=Cambiar las preferencias de usuario y contraseña Comment[es_DO]=Cambiar las preferencias de usuario y contraseña Comment[es_EC]=Cambiar las preferencias de usuario y contraseña Comment[es_ES]=Cambiar las preferencias de usuario y contraseña Comment[es_MX]=Cambiar las preferencias de usuario y contraseña Comment[es_NI]=Cambiar las preferencias de usuario y contraseña Comment[es_PA]=Cambiar las preferencias de usuario y contraseña Comment[es_PE]=Cambiar las preferencias de usuario y contraseña Comment[es_PR]=Cambiar las preferencias de usuario y contraseña Comment[es_SV]=Cambiar las preferencias de usuario y contraseña Comment[es_UY]=Cambiar las preferencias de usuario y contraseña Comment[es_VE]=Cambiar las preferencias de usuario y contraseña Comment[eu]=Aldatu erabiltzailearen hobespenak eta pasahitza Comment[fi]=Muuta käyttäjäasetuksiasi ja salasanaasi Comment[fi_FI]=Muuta käyttäjäasetuksiasi ja salasanaasi Comment[fr]=Changez vos préférences utilisateur et votre mot de passe Comment[fr_CA]=Modifier vos paramètres d'utilisateur et votre mot de passe Comment[fr_FR]=Changez vos préférences utilisateur et votre mot de passe Comment[gd]=Atharraich roghainnean a' chleachdaiche 's am facal-faire agad Comment[gl]=Cambia as preferencias e o contrasinal do usuario Comment[gl_ES]=Cambia as preferencias e o contrasinal do usuario Comment[hr]=Promijenite svoje osobitosti korisnika i lozinke Comment[hu]=Felhasználói beállítások és jelszavak módosítása Comment[hu_HU]=Felhasználói beállítások és jelszavak módosítása Comment[ia]=Cambiar tu preferentias de usator e contrasigno Comment[id]=Ubah kata kunci dan preferensi anda Comment[id_ID]=Ubah kata kunci dan preferensi anda Comment[is]=Breyta notandastillingum þínum og lykilorði Comment[it]=Modifica preferenze utente e password Comment[it_CH]=Modifica preferenze utente e password Comment[it_IT]=Modifica preferenze utente e password Comment[ja]=ユーザ設定とパスワードの変更 Comment[ja_JP]=ユーザ設定とパスワードの変更 Comment[ko]=사용자 설정과 비밀번호를 바꿉니다 Comment[ko_KR]=사용자 설정과 비밀번호를 바꿉니다 Comment[lt]=Keisti naudotojo nuostatas ir slaptažodį Comment[lt_LT]=Keisti naudotojo nuostatas ir slaptažodį Comment[lv]=Mainīt savas lietotāja vēlmes un paroli Comment[lv_LV]=Mainīt savas lietotāja vēlmes un paroli Comment[ms]=Tukar pilihan pengguna dan kata laluan Comment[ms_MY]=Tukar pilihan pengguna dan kata laluan Comment[nb]=Endre dine brukerinnstillinger og passord Comment[nb_NO]=Endre dine brukerinnstillinger og passord Comment[nds]=Ändern Sie Ihre Benutzereinstellungen und Passwort Comment[nl]=Verander uw gebruikersvoorkeuren en wachtwoord Comment[nl_NL]=Verander uw gebruikersvoorkeuren en wachtwoord Comment[pl]=Zmień swoje preferencje użytkownika i hasło Comment[pl_PL]=Zmień swoje preferencje użytkownika i hasło Comment[pt]=Mudar as suas preferências de utilizador e palavra passe Comment[pt_BR]=Mudar as suas preferências e senha de usuário Comment[pt_PT]=Mudar as suas preferências de utilizador e palavra passe Comment[ro]=Schimbați preferințele pentru utilizator și parolă Comment[ro_RO]=Schimbați preferințele pentru utilizator și parolă Comment[ru]=Изменить пользовательские настройки и пароль Comment[sk]=Zmeniť vaše používateľské predvoľby a heslo Comment[sk_SK]=Zmeniť vaše používateľské predvoľby a heslo Comment[sl]=Spremenite uporabniške možnosti in geslo Comment[sl_SI]=Spremenite uporabniške možnosti in geslo Comment[sq]=Ndrysho parapëlqimet e përdoruesit dhe fjalëkalimin Comment[sr]=Промени поставке вашег налога и лозинку Comment[sr@Latn]=Промени поставке вашег налога и лозинку Comment[sr@ije]=Промени поставке вашег налога и лозинку Comment[sr@ijekavianlatin]=Промени поставке вашег налога и лозинку Comment[sr@latin]=Промени поставке вашег налога и лозинку Comment[sr_RS]=Промени поставке вашег налога и лозинку Comment[sr_RS@latin]=Промени поставке вашег налога и лозинку Comment[sv]=Ändra dina användarinställnigar och lösenord Comment[tg]=Тағйир додани хусусиятҳо ва пароли корбар Comment[th]=เปลี่ยนการตั้งค่าผู้ใช้ขั้นสูงและรหัสผ่านของคุณ Comment[th_TH]=เปลี่ยนการตั้งค่าผู้ใช้ขั้นสูงและรหัสผ่านของคุณ Comment[tr]=Kullanıcı tercihlerini/haklarını ve şifresini değiştir Comment[tr_TR]=Kullanıcı tercihlerini/haklarını ve şifresini değiştir Comment[uk]=Змінити налаштування користувача і гасло Comment[uk_UA]=Змінити налаштування користувача і гасло Comment[ur]=اپنی ترجیحات یا پاسورڈ بدلیں Comment[vi]=Thay đổi tuỳ thích và mật khẩu người dùng của bạn Comment[vi_VN]=Thay đổi tuỳ thích và mật khẩu người dùng của bạn Comment[zh_CN]=修改用户设置和密码 Comment[zh_HK]=變更你的使用者喜好設定與密碼 Comment[zh_TW]=變更您的使用者偏好設定與密碼 Keywords=user;account;information;details; Keywords[am]=የ ተጠቃሚ፡ መግለጫ፡ ዝርዝር፡ መረጃዎች; Keywords[ar]=مستخدم، حساب، معلومات، تفاصيل; Keywords[ast]=usuariu;cuenta;información;detalles; Keywords[be]=карыстальнік;уліковы запіс;інфармацыя;дэталі; Keywords[be@latin]=карыстальнік;уліковы запіс;інфармацыя;дэталі; Keywords[be_BY]=карыстальнік;уліковы запіс;інфармацыя;дэталі; Keywords[bg]=потребител;акаунт;информация;детайли; Keywords[bg_BG]=потребител;акаунт;информация;детайли; Keywords[bs]=korisnik;račun;informacija;detalji; Keywords[ca]=usuari;compte;informació;detalls; Keywords[ca@valencia]=usuari;compte;informació;detalls; Keywords[ca_ES]=usuari;compte;informació;detalls; Keywords[ca_ES@valencia]=usuari;compte;informació;detalls; Keywords[cs]=uživatel;účet;informace;detaily; Keywords[cs_CZ]=uživatel;účet;informace;detaily; Keywords[cy]=defnyddiwr;cyfrif;gwybodaeth;manylion; Keywords[da]=bruger;konto;information;detaljer; Keywords[da_DK]=bruger;konto;information;detaljer; Keywords[de]=Benutzer;Benutzerkonto;Information;Details; Keywords[de_CH]=Benutzer;Benutzerkonto;Information;Details; Keywords[de_DE]=Benutzer;Benutzerkonto;Information;Details; Keywords[el]=χρήστες;λογαριασμοί;χρήστης;πληροφορίες;λεπτομέρειες;λογαριασμός; Keywords[es]=usuario;cuenta;información;detalles; Keywords[es_AR]=usuario;cuenta;información;detalles; Keywords[es_CL]=usuario;cuenta;información;detalles; Keywords[es_CO]=usuario;cuenta;información;detalles; Keywords[es_CR]=usuario;cuenta;información;detalles; Keywords[es_DO]=usuario;cuenta;información;detalles; Keywords[es_EC]=usuario;cuenta;información;detalles; Keywords[es_ES]=usuario;cuenta;información;detalles; Keywords[es_MX]=usuario;cuenta;información;detalles; Keywords[es_NI]=usuario;cuenta;información;detalles; Keywords[es_PA]=usuario;cuenta;información;detalles; Keywords[es_PE]=usuario;cuenta;información;detalles; Keywords[es_PR]=usuario;cuenta;información;detalles; Keywords[es_SV]=usuario;cuenta;información;detalles; Keywords[es_UY]=usuario;cuenta;información;detalles; Keywords[es_VE]=usuario;cuenta;información;detalles; Keywords[et]=kasutaja;konto;info; üksikasjad; Keywords[et_EE]=kasutaja;konto;info; üksikasjad; Keywords[eu]=erabiltzailea;kontua;informazioa;xehetasunak; Keywords[fi]=käyttäjä;tili;tieto;yksityiskohdat; Keywords[fi_FI]=käyttäjä;tili;tieto;yksityiskohdat; Keywords[fr]=utilisateur;compte;information;détails; Keywords[fr_CA]=utilisateur;compte;information;détails; Keywords[fr_FR]=utilisateur;compte;information;détails; Keywords[fy]=brûker;akkount;ynformaasje;details; Keywords[gd]=cleachdaiche;cunntas;fiosrachadh;mion-fhiosrachadh;user;account;information;details; Keywords[gl]=usuario;conta;información;detalles; Keywords[gl_ES]=usuario;conta;información;detalles; Keywords[hr]=korisnik;račun;informacije;pojedinosti; Keywords[hu]=felhasználó;fiók;információ;részletek; Keywords[hu_HU]=felhasználó;fiók;információ;részletek; Keywords[ia]=usator;conto;information;detalios; Keywords[id]=pengguna;akun;informasi;detail; Keywords[id_ID]=pengguna;akun;informasi;detail; Keywords[is]=notandi;aðgangur;reikningur;notandaupplýsingar;dnánar; Keywords[it]=utente;account;informazione;dettagli; Keywords[it_CH]=utente;account;informazione;dettagli; Keywords[it_IT]=utente;account;informazione;dettagli; Keywords[ja]=ユーザ、アカウント、情報、詳細; Keywords[ja_JP]=ユーザ、アカウント、情報、詳細; Keywords[ko]=사용자;계정;정보;상세 정보; Keywords[ko_KR]=사용자;계정;정보;상세 정보; Keywords[lv]=lietotājs;konts;informācija;detaļas; Keywords[lv_LV]=lietotājs;konts;informācija;detaļas; Keywords[ms]=pengguna;akaun;maklumat;perincian; Keywords[ms_MY]=pengguna;akaun;maklumat;perincian; Keywords[nb]=bruker;konto;informasjon;detaljer; Keywords[nb_NO]=bruker;konto;informasjon;detaljer; Keywords[nds]=Benutzer;Konto;Informationen;Details; Keywords[nl]=gebruiker;account;informatie;details; Keywords[nl_NL]=gebruiker;account;informatie;details; Keywords[om]=fayyadamaa;eenyummeessaa;odeeffannoo;bal'insa; Keywords[pl]=użytkownik;konto;informacje;szczegóły; Keywords[pl_PL]=użytkownik;konto;informacje;szczegóły; Keywords[pt]=utilizadores;contas;informações;detalhes; Keywords[pt_BR]=usuário;conta;informação;detalhes; Keywords[pt_PT]=utilizadores;contas;informações;detalhes; Keywords[ro]=utilizator;cont;informații;detalii; Keywords[ro_RO]=utilizator;cont;informații;detalii; Keywords[ru]=пользователь;учётная запись;информация;детали; Keywords[sk]=užívateľ;účet;informácie;detaily; Keywords[sk_SK]=užívateľ;účet;informácie;detaily; Keywords[sl]=uporabnik;račun;podatek;podrobnosti; Keywords[sl_SI]=uporabnik;račun;podatek;podrobnosti; Keywords[sq]=përdoruesi;llogaria;informacione;detaje; Keywords[sr]=корисник;налог;податак;појединости; Keywords[sr@Latn]=корисник;налог;податак;појединости; Keywords[sr@ije]=корисник;налог;податак;појединости; Keywords[sr@ijekavianlatin]=корисник;налог;податак;појединости; Keywords[sr@latin]=корисник;налог;податак;појединости; Keywords[sr_RS]=корисник;налог;податак;појединости; Keywords[sr_RS@latin]=корисник;налог;податак;појединости; Keywords[sv]=användare;konto;information;detaljer; Keywords[ta]=பயனர்;கணக்கு;தகவல்;விவரங்கள்; Keywords[ta_LK]=பயனர்;கணக்கு;தகவல்;விவரங்கள்; Keywords[tg]=корбар;ҳисоб;иттилоот;тафсилот; Keywords[th]=ผู้ใช้;บัญชีผู้ใช้;ข้อมูล;รายละเอียด; Keywords[th_TH]=ผู้ใช้;บัญชีผู้ใช้;ข้อมูล;รายละเอียด; Keywords[tr]=kullanıcı;hesap;bilgi;ayrıntılar; Keywords[tr_TR]=kullanıcı;hesap;bilgi;ayrıntılar; Keywords[uk]=користувач;обліковий запис;інформація;подробиці; Keywords[uk_UA]=користувач;обліковий запис;інформація;подробиці; Keywords[ur]=صارف، کھاتے، معلومات و تفصیلات; Keywords[vi]=người dùng;tài khoản;thông tin;chi tiết; Keywords[vi_VN]=người dùng;tài khoản;thông tin;chi tiết; Keywords[zh_CN]=user;account;information;details;用户;帐户;信息;详情;细节;详细; Keywords[zh_HK]=使用者;帳號;資訊;詳細資料; Keywords[zh_TW]=使用者;帳號;資訊;詳細資訊; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-effects.desktop0000664000175000017500000003463413215735076026413 0ustar fabiofabio[Desktop Entry] Icon=cs-desktop-effects Exec=cinnamon-settings effects Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Effects Name[am]=ውጤቶች Name[ar]=تأثيرات Name[ast]=Efeutos Name[be]=Спецэфекты Name[be@latin]=Спецэфекты Name[be_BY]=Спецэфекты Name[bg]=Ефекти Name[bg_BG]=Ефекти Name[bs]=Efekti Name[ca]=Efectes Name[ca@valencia]=Efectes Name[ca_ES]=Efectes Name[ca_ES@valencia]=Efectes Name[cs]=Efekty Name[cs_CZ]=Efekty Name[cy]=Effeithiau Name[da]=Effekter Name[da_DK]=Effekter Name[de]=Effekte Name[de_CH]=Effekte Name[de_DE]=Effekte Name[el]=Εφέ Name[eo]=Efektoj Name[es]=Efectos Name[es_AR]=Efectos Name[es_CL]=Efectos Name[es_CO]=Efectos Name[es_CR]=Efectos Name[es_DO]=Efectos Name[es_EC]=Efectos Name[es_ES]=Efectos Name[es_MX]=Efectos Name[es_NI]=Efectos Name[es_PA]=Efectos Name[es_PE]=Efectos Name[es_PR]=Efectos Name[es_SV]=Efectos Name[es_UY]=Efectos Name[es_VE]=Efectos Name[et]=Efektid Name[et_EE]=Efektid Name[eu]=Efektuak Name[fa]=جلوه‌ها Name[fa_AF]=جلوه‌ها Name[fa_IR]=جلوه‌ها Name[fi]=Tehosteet Name[fi_FI]=Tehosteet Name[fr]=Effets Name[fr_CA]=Effets Name[fr_FR]=Effets Name[ga]=Maisíochtaí Name[gd]=Èifeachdan Name[gl]=Efectos Name[gl_ES]=Efectos Name[hr]=Efekti Name[hu]=Effektusok Name[hu_HU]=Effektusok Name[ia]=Effectos Name[id]=Efek Name[id_ID]=Efek Name[is]=Viðmótsbrellur Name[it]=Effetti Name[it_CH]=Effetti Name[it_IT]=Effetti Name[ja]=効果 Name[ja_JP]=効果 Name[kab]=Isemda Name[ko]=효과 Name[ko_KR]=효과 Name[lo]=ເອັບເຟັກ Name[lo_LA]=ເອັບເຟັກ Name[lt]=Efektai Name[lt_LT]=Efektai Name[lv]=Efekti Name[lv_LV]=Efekti Name[ms]=Kesan Name[ms_MY]=Kesan Name[nb]=Effekter Name[nb_NO]=Effekter Name[nds]=Effekte Name[nl]=Effecten Name[nl_NL]=Effecten Name[oc]=Efièits Name[om]=galteelee Name[pa]=ਪ੍ਰਭਾਵ Name[pl]=Efekty Name[pl_PL]=Efekty Name[pt]=Efeitos Name[pt_BR]=Efeitos Name[pt_PT]=Efeitos Name[ro]=Efecte Name[ro_RO]=Efecte Name[ru]=Эффекты Name[sk]=Efekty Name[sk_SK]=Efekty Name[sl]=Učinki Name[sl_SI]=Učinki Name[sq]=Efektet Name[sr]=Дејства Name[sr@Latn]=Дејства Name[sr@ije]=Дејства Name[sr@ijekavianlatin]=Дејства Name[sr@latin]=Дејства Name[sr_RS]=Дејства Name[sr_RS@latin]=Дејства Name[sv]=Effekter Name[ta]=விளைவுகள் Name[ta_LK]=விளைவுகள் Name[tg]=Таъсирҳо Name[th]=ลูกเล่น Name[th_TH]=ลูกเล่น Name[tr]=Efektler Name[tr_TR]=Efektler Name[uk]=Ефекти Name[uk_UA]=Ефекти Name[ur]=اثرات Name[vi]=Hiệu ứng Name[vi_VN]=Hiệu ứng Name[zh_CN]=特效 Name[zh_HK]=效果 Name[zh_TW]=效果 Comment=Control Cinnamon visual effects. Comment[am]=የ ሲናሞን መመልከቻ ውጤቶች መቆጣጠሪያ Comment[ar]=التحكم في تأثيرات سينامُن المرئية. Comment[be]=Кіраванне візуальнымі эфектамі Cinnamon Comment[be@latin]=Кіраванне візуальнымі эфектамі Cinnamon Comment[be_BY]=Кіраванне візуальнымі эфектамі Cinnamon Comment[bg]=Контролиране на визуалните ефекти на Cinnamon Comment[bg_BG]=Контролиране на визуалните ефекти на Cinnamon Comment[bs]=Upravljaj Cinnamon vizuelnim efektima Comment[ca]=Controleu els efectes visuals de Cinnamon. Comment[ca@valencia]=Configurar efectes visuals de Cinnamon Comment[ca_ES]=Controleu els efectes visuals de Cinnamon. Comment[ca_ES@valencia]=Configurar efectes visuals de Cinnamon Comment[cs]=Nastavení Cinnamon vizuálních efektů Comment[cs_CZ]=Nastavení Cinnamon vizuálních efektů Comment[cy]=Rheolwch effeitiau gwledol Cinnamon, Comment[da]=Kontrollér Cinnamons visuelle effekter Comment[da_DK]=Kontrollér Cinnamons visuelle effekter Comment[de]=Cinnamons visuelle Effekte steuern. Comment[de_CH]=Cinnamons visuelle Effekte steuern. Comment[de_DE]=Cinnamons visuelle Effekte steuern. Comment[el]=Ρυθμίστε τα οπτικά εφέ του Cinnamon Comment[es]=Configurar efectos visuales de Cinnamon Comment[es_AR]=Configurar efectos visuales de Cinnamon Comment[es_CL]=Configurar efectos visuales de Cinnamon Comment[es_CO]=Configurar efectos visuales de Cinnamon Comment[es_CR]=Configurar efectos visuales de Cinnamon Comment[es_DO]=Configurar efectos visuales de Cinnamon Comment[es_EC]=Configurar efectos visuales de Cinnamon Comment[es_ES]=Configurar efectos visuales de Cinnamon Comment[es_MX]=Configurar efectos visuales de Cinnamon Comment[es_NI]=Configurar efectos visuales de Cinnamon Comment[es_PA]=Configurar efectos visuales de Cinnamon Comment[es_PE]=Configurar efectos visuales de Cinnamon Comment[es_PR]=Configurar efectos visuales de Cinnamon Comment[es_SV]=Configurar efectos visuales de Cinnamon Comment[es_UY]=Configurar efectos visuales de Cinnamon Comment[es_VE]=Configurar efectos visuales de Cinnamon Comment[eu]=Kontrolatu Cinnamonen efektu bisualak Comment[fa]=جلوه‌های تصویری سینمون را کنترل کنید. Comment[fa_AF]=جلوه‌های تصویری سینمون را کنترل کنید. Comment[fa_IR]=جلوه‌های تصویری سینمون را کنترل کنید. Comment[fi]=Hallitse Cinnamonin ilmettä. Comment[fi_FI]=Hallitse Cinnamonin ilmettä. Comment[fr]=Gérez les effets visuels de Cinnamon Comment[fr_CA]=Contrôler les effets visuels de Cinnamon Comment[fr_FR]=Gérez les effets visuels de Cinnamon Comment[gd]=Stiùirich èifeachdan lèirsinneach Cinnamon. Comment[gl]=Control dos efectos visuais de Cinnamon. Comment[gl_ES]=Control dos efectos visuais de Cinnamon. Comment[hr]=Upravljajte Cinnamon vizualnim efektima. Comment[hu]=Cinnamon vizuális effektusok beállítása Comment[hu_HU]=Cinnamon vizuális effektusok beállítása Comment[ia]=Controlar le effectos visual de Cinnamon. Comment[id]=Atur efek visual Cinnamon Comment[id_ID]=Atur efek visual Cinnamon Comment[is]=Stýra viðmótsbrellum í Cinnamon. Comment[it]=Controllo effetti grafici di Cinnamon Comment[it_CH]=Controllo effetti grafici di Cinnamon Comment[it_IT]=Controllo effetti grafici di Cinnamon Comment[ja]=Cinnamon ビジュアルエフェクトコントロール Comment[ja_JP]=Cinnamon ビジュアルエフェクトコントロール Comment[ko]=시나몬 비주얼 효과를 조절합니다. Comment[ko_KR]=시나몬 비주얼 효과를 조절합니다. Comment[lo]=ຈັດການ Cinnamon visual effects. Comment[lo_LA]=ຈັດການ Cinnamon visual effects. Comment[lt]=Valdyti Cinnamon vaizdo efektus. Comment[lt_LT]=Valdyti Cinnamon vaizdo efektus. Comment[lv]=Pārvaldīt Cinnamon vizuālos efektus. Comment[lv_LV]=Pārvaldīt Cinnamon vizuālos efektus. Comment[ms]=Kawalan kesan visual Cinnamon Comment[ms_MY]=Kawalan kesan visual Cinnamon Comment[nb]=Styr Cinnamons visuelle effekter Comment[nb_NO]=Styr Cinnamons visuelle effekter Comment[nds]=Cinnamons Visuelle Effekte bearbeiten Comment[nl]=Visuele effecten van Cinnamon beheren. Comment[nl_NL]=Visuele effecten van Cinnamon beheren. Comment[pl]=Kontroluj efekty wizualne Cinnamona. Comment[pl_PL]=Kontroluj efekty wizualne Cinnamona. Comment[pt]=Controle os efeitos visuais do Cinnamon. Comment[pt_BR]=Controle os efeitos visuais do Cinnamon Comment[pt_PT]=Controle os efeitos visuais do Cinnamon. Comment[ro]=Controlează efectele vizuale Cinnamon. Comment[ro_RO]=Controlează efectele vizuale Cinnamon. Comment[ru]=Управление визуальными эффектами Cinnamon. Comment[sk]=Kontrolovať vizuálne efekty Cinnamon Comment[sk_SK]=Kontrolovať vizuálne efekty Cinnamon Comment[sl]=Upravljajte z vidnimi učinki Cinnamona Comment[sl_SI]=Upravljajte z vidnimi učinki Cinnamona Comment[sq]=Efektet vizuale të Cinnamon. Comment[sr]=Управљање видним дејствима површи Цимета. Comment[sr@Latn]=Управљање видним дејствима површи Цимета. Comment[sr@ije]=Управљање видним дејствима површи Цимета. Comment[sr@ijekavianlatin]=Управљање видним дејствима површи Цимета. Comment[sr@latin]=Управљање видним дејствима површи Цимета. Comment[sr_RS]=Управљање видним дејствима површи Цимета. Comment[sr_RS@latin]=Управљање видним дејствима површи Цимета. Comment[sv]=Styr Cinnamons visuella effekter. Comment[tg]=Идоракунии таъсирҳои визуалии Cinnamon Comment[th]=ควบคุมผลภาพ Cinnamon Comment[th_TH]=ควบคุมผลภาพ Cinnamon Comment[tr]=Cinnamon görsel efektlerini kontrol et Comment[tr_TR]=Cinnamon görsel efektlerini kontrol et Comment[uk]=Керування наочними ефектами Cinnamon Comment[uk_UA]=Керування наочними ефектами Cinnamon Comment[ur]=سنامون کے نمائشی تاثرات کو کنٹرول کریں Comment[vi]=Điều khiển hiệu ứng trực quan Cinnamon. Comment[vi_VN]=Điều khiển hiệu ứng trực quan Cinnamon. Comment[zh_CN]=控制 Cinnamon 显示特效。 Comment[zh_HK]=控制 Cinnamon 視覺效果。 Comment[zh_TW]=管理 Cinnamon 視覺效果。 Keywords=effects;fancy;window; Keywords[ar]=تأثيرات ، فاخر ، نافذة; Keywords[be]=эфекты;фантазія;акно; Keywords[be@latin]=эфекты;фантазія;акно; Keywords[be_BY]=эфекты;фантазія;акно; Keywords[bg]=ефекти;декорации;прозорец; Keywords[bg_BG]=ефекти;декорации;прозорец; Keywords[bs]=efekti;fantazija;prozor; Keywords[ca]=efectes;fantasia;finestra; Keywords[ca@valencia]=efectes;decoració;finestra; Keywords[ca_ES]=efectes;fantasia;finestra; Keywords[ca_ES@valencia]=efectes;decoració;finestra; Keywords[cs]=efekty;fantazie;okna; Keywords[cs_CZ]=efekty;fantazie;okna; Keywords[cy]=effeithiau;ffansi;ffenestr; Keywords[da]=effekter;smart;vindue; Keywords[da_DK]=effekter;smart;vindue; Keywords[de]=Effekte;Geschnörkel;Dekoration;Fenster; Keywords[de_CH]=Effekte;Geschnörkel;Dekoration;Fenster; Keywords[de_DE]=Effekte;Geschnörkel;Dekoration;Fenster; Keywords[el]=εφέ;παράθυρο;παράθυρα; Keywords[es]=efectos;fantasía;ventana; Keywords[es_AR]=efectos;fantasía;ventana; Keywords[es_CL]=efectos;fantasía;ventana; Keywords[es_CO]=efectos;fantasía;ventana; Keywords[es_CR]=efectos;fantasía;ventana; Keywords[es_DO]=efectos;fantasía;ventana; Keywords[es_EC]=efectos;fantasía;ventana; Keywords[es_ES]=efectos;fantasía;ventana; Keywords[es_MX]=efectos;fantasía;ventana; Keywords[es_NI]=efectos;fantasía;ventana; Keywords[es_PA]=efectos;fantasía;ventana; Keywords[es_PE]=efectos;fantasía;ventana; Keywords[es_PR]=efectos;fantasía;ventana; Keywords[es_SV]=efectos;fantasía;ventana; Keywords[es_UY]=efectos;fantasía;ventana; Keywords[es_VE]=efectos;fantasía;ventana; Keywords[eu]=efektuak;dotore;leihoa; Keywords[fa]=جلوه‌ها، تصویر، پنجره; Keywords[fa_AF]=جلوه‌ها، تصویر، پنجره; Keywords[fa_IR]=جلوه‌ها، تصویر، پنجره; Keywords[fi]=tehosteet;koristeellinen;ikkuna; Keywords[fi_FI]=tehosteet;koristeellinen;ikkuna; Keywords[fr]=effets;fantaisie;fenêtre; Keywords[fr_CA]=effets;fantaisie;fenêtre; Keywords[fr_FR]=effets;fantaisie;fenêtre; Keywords[ga]=maisíochtaí;galanta;fuinneoga; Keywords[gd]=buaidhean;èifeachdan;leòmach;uinneag;effects;fancy;window; Keywords[gl]=efectos;fantasía;xanela; Keywords[gl_ES]=efectos;fantasía;xanela; Keywords[hr]=efekti;ukrašeno;prozor; Keywords[hu]=effektusok;díszes;ablak; Keywords[hu_HU]=effektusok;díszes;ablak; Keywords[ia]=effectos;eccentric;fenestra; Keywords[id]=efek;kesenangan;jendela; Keywords[id_ID]=efek;kesenangan;jendela; Keywords[is]=brellur;skraut;gluggi; Keywords[it]=effetti;fantasia;finestra; Keywords[it_CH]=effetti;fantasia;finestra; Keywords[it_IT]=effetti;fantasia;finestra; Keywords[ja]=効果、ファンシー、ウィンドウ; Keywords[ja_JP]=効果、ファンシー、ウィンドウ; Keywords[ko]=효과;팬시;창; Keywords[ko_KR]=효과;팬시;창; Keywords[lo]=ເອັບເຟັກ;fancy;ໜ້າຕ່າງ; Keywords[lo_LA]=ເອັບເຟັກ;fancy;ໜ້າຕ່າງ; Keywords[lt]=efektai;papuošimai;langas; Keywords[lt_LT]=efektai;papuošimai;langas; Keywords[lv]=efekti;moderns;logs; Keywords[lv_LV]=efekti;moderns;logs; Keywords[ms]=kesan;ragam;tetingkap; Keywords[ms_MY]=kesan;ragam;tetingkap; Keywords[nb]=effekter;fiffig;vindu; Keywords[nb_NO]=effekter;fiffig;vindu; Keywords[nds]=Effekte;Fantasie;Fenster; Keywords[nl]=effecten;verfraaid;venster; Keywords[nl_NL]=effecten;verfraaid;venster; Keywords[om]=galteelee;miidhagaa;foddaa; Keywords[pl]=efekty;fantazyjne;okno; Keywords[pl_PL]=efekty;fantazyjne;okno; Keywords[pt]=efeitos;especiais;janela; Keywords[pt_BR]=efeitos;estilos;janela; Keywords[pt_PT]=efeitos;especiais;janela; Keywords[ro]=efecte;fantezie;fereastră; Keywords[ro_RO]=efecte;fantezie;fereastră; Keywords[ru]=эффекты;фантазия;окно; Keywords[sk]=efekty;fantázia;okná; Keywords[sk_SK]=efekty;fantázia;okná; Keywords[sl]=učinki;modno;okno; Keywords[sl_SI]=učinki;modno;okno; Keywords[sq]=efektet;zbukuruar;dritarja; Keywords[sr]=утисци;прозор;лепо;; Keywords[sr@Latn]=утисци;прозор;лепо;; Keywords[sr@ije]=утисци;прозор;лепо;; Keywords[sr@ijekavianlatin]=утисци;прозор;лепо;; Keywords[sr@latin]=утисци;прозор;лепо;; Keywords[sr_RS]=утисци;прозор;лепо;; Keywords[sr_RS@latin]=утисци;прозор;лепо;; Keywords[sv]=effekter;infall;fönster; Keywords[ta]=விளைவுகள்;பகட்டு;சாளரம்; Keywords[ta_LK]=விளைவுகள்;பகட்டு;சாளரம்; Keywords[tg]=таъсирҳо;ҳаёл;равзана; Keywords[th]=ลักษณะพิเศษ;แฟนซี;หน้าต่าง; Keywords[th_TH]=ลักษณะพิเศษ;แฟนซี;หน้าต่าง; Keywords[tr]=efekt;imge;pencere; Keywords[tr_TR]=efekt;imge;pencere; Keywords[uk]=ефекти;фантазія;вікно; Keywords[uk_UA]=ефекти;фантазія;вікно; Keywords[ur]=اثرات، فینسی(fancy)، ونڈو; Keywords[vi]=hiệu ứng;đẹp đẽ;cửa sổ; Keywords[vi_VN]=hiệu ứng;đẹp đẽ;cửa sổ; Keywords[zh_CN]=effects;fancy;window;效果;特效;窗口; Keywords[zh_HK]=效果;花式;視窗; Keywords[zh_TW]=效果;花樣;視窗; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-settings-screensaver.desktop0000664000175000017500000004242313215735076027307 0ustar fabiofabio[Desktop Entry] Icon=cs-screensaver Exec=cinnamon-settings screensaver Type=Application OnlyShowIn=X-Cinnamon; Categories=Settings; Name=Screensaver Name[am]=መመልከቻ ማዳኛ Name[ar]=شاشة التوقف Name[bg]=Предпазител на екрана Name[bg_BG]=Предпазител на екрана Name[ca]=Estalvi de pantalla Name[ca@valencia]=Estalvi de pantalla Name[ca_ES]=Estalvi de pantalla Name[ca_ES@valencia]=Estalvi de pantalla Name[cs]=Šetřič obrazovky Name[cs_CZ]=Šetřič obrazovky Name[cy]=Arbedwr sgrin Name[da]=Pauseskærm Name[da_DK]=Pauseskærm Name[de]=Bildschirmschoner Name[de_CH]=Bildschirmschoner Name[de_DE]=Bildschirmschoner Name[el]=Προφύλαξη οθόνης Name[eo]=Ekrankurteno Name[es]=Salvapantallas Name[es_AR]=Salvapantallas Name[es_CL]=Salvapantallas Name[es_CO]=Salvapantallas Name[es_CR]=Salvapantallas Name[es_DO]=Salvapantallas Name[es_EC]=Salvapantallas Name[es_ES]=Salvapantallas Name[es_MX]=Salvapantallas Name[es_NI]=Salvapantallas Name[es_PA]=Salvapantallas Name[es_PE]=Salvapantallas Name[es_PR]=Salvapantallas Name[es_SV]=Salvapantallas Name[es_UY]=Salvapantallas Name[es_VE]=Salvapantallas Name[eu]=Pantaila-babeslea Name[fi]=Näytönsäästäjä Name[fi_FI]=Näytönsäästäjä Name[fr]=Économiseur d'écran Name[fr_CA]=Économiseur d'écran Name[fr_FR]=Économiseur d'écran Name[gd]=Sàbhalaiche-sgrìn Name[gl]=Protector de pantalla Name[gl_ES]=Protector de pantalla Name[hr]=Čuvar zaslona Name[hu]=Képernyővédő Name[hu_HU]=Képernyővédő Name[ia]=Salva schermo Name[is]=Skjáhvíla Name[it]=Salvaschermo Name[it_CH]=Salvaschermo Name[it_IT]=Salvaschermo Name[ja]=スクリーンセーバー Name[ja_JP]=スクリーンセーバー Name[kab]=Agdil n usuḍes Name[ko]=화면 보호기 Name[ko_KR]=화면 보호기 Name[lt]=Ekrano užsklanda Name[lt_LT]=Ekrano užsklanda Name[ms]=Penjimat Skrin Name[ms_MY]=Penjimat Skrin Name[nb]=Skjermsparer Name[nb_NO]=Skjermsparer Name[nds]=Bildschirmschoner Name[nl]=Schermbeveiliging Name[nl_NL]=Schermbeveiliging Name[oc]=Estalviador d'ecran Name[pl]=Wygaszacz ekranu Name[pl_PL]=Wygaszacz ekranu Name[pt]=Proteção de ecrã Name[pt_BR]=Proteção de Tela Name[pt_PT]=Proteção de ecrã Name[ro]=Protector ecran Name[ro_RO]=Protector ecran Name[ru]=Экранная заставка Name[sk]=Šetrič obrazovky Name[sk_SK]=Šetrič obrazovky Name[sq]=Ruajtës ekrani Name[sr]=Чувар екрана Name[sr@Latn]=Чувар екрана Name[sr@ije]=Чувар екрана Name[sr@ijekavianlatin]=Чувар екрана Name[sr@latin]=Чувар екрана Name[sr_RS]=Чувар екрана Name[sr_RS@latin]=Чувар екрана Name[sv]=Skärmsläckare Name[th]=โปรแกรมรักษาหน้าจอ Name[th_TH]=โปรแกรมรักษาหน้าจอ Name[tr]=Ekran koruyucu Name[tr_TR]=Ekran koruyucu Name[uk]=Зберігач екрану Name[uk_UA]=Зберігач екрану Name[ur]=سکرین سیور Name[vi]=Trình bảo vệ màn hình Name[vi_VN]=Trình bảo vệ màn hình Name[zh_CN]=屏幕保护程序 Name[zh_HK]=熒幕保護程式 Name[zh_TW]=螢幕保護程式 Comment=Manage screen lock settings Comment[am]=የመመልከቻ መቆለፊያ ማሰናጃ አስተዳዳሪ Comment[ar]=إدارة إعدادات قفل الشاشة Comment[ast]=Axustes del alministrador de bloquéu de pantalla Comment[be]=Кіраванне параметрамі блакiравання экрана Comment[be@latin]=Кіраванне параметрамі блакiравання экрана Comment[be_BY]=Кіраванне параметрамі блакiравання экрана Comment[bg]=Управление на настройките за заключване на екрана Comment[bg_BG]=Управление на настройките за заключване на екрана Comment[bs]=Upravljaj postavkama zaključavanja ekrana Comment[ca]=Gestioneu la configuració del bloqueig de pantalla Comment[ca@valencia]=Configura bloqueig de pantalla Comment[ca_ES]=Gestioneu la configuració del bloqueig de pantalla Comment[ca_ES@valencia]=Configura bloqueig de pantalla Comment[cs]=Nastavení zamykací obrazovky Comment[cs_CZ]=Nastavení zamykací obrazovky Comment[cy]=Rheoli gosodiadau cloi'r sgrin Comment[da]=Administrér skærmlåsindstillinger Comment[da_DK]=Administrér skærmlåsindstillinger Comment[de]=Einstellungen der Bildschirmsperre verwalten Comment[de_CH]=Einstellungen der Bildschirmsperre verwalten Comment[de_DE]=Einstellungen der Bildschirmsperre verwalten Comment[el]=Διαχείριση ρυθμίσεων κλειδώματος οθόνης Comment[es]=Configurar bloqueo de pantalla Comment[es_AR]=Configurar bloqueo de pantalla Comment[es_CL]=Configurar bloqueo de pantalla Comment[es_CO]=Configurar bloqueo de pantalla Comment[es_CR]=Configurar bloqueo de pantalla Comment[es_DO]=Configurar bloqueo de pantalla Comment[es_EC]=Configurar bloqueo de pantalla Comment[es_ES]=Configurar bloqueo de pantalla Comment[es_MX]=Configurar bloqueo de pantalla Comment[es_NI]=Configurar bloqueo de pantalla Comment[es_PA]=Configurar bloqueo de pantalla Comment[es_PE]=Configurar bloqueo de pantalla Comment[es_PR]=Configurar bloqueo de pantalla Comment[es_SV]=Configurar bloqueo de pantalla Comment[es_UY]=Configurar bloqueo de pantalla Comment[es_VE]=Configurar bloqueo de pantalla Comment[eu]=Kudeatu pantaila blokeatzearen ezarpenak Comment[fi]=Muokkaa näytön lukituksen asetuksia Comment[fi_FI]=Muokkaa näytön lukituksen asetuksia Comment[fr]=Gérer les paramètres de verrouillage d'écran Comment[fr_CA]=Gérer les paramètres de verrouillage d'écran Comment[fr_FR]=Gérer les paramètres de verrouillage d'écran Comment[gd]=Stiùirich roghainnean glasaidh na sgrìn Comment[gl]=Administra os axustes do bloqueo de pantalla Comment[gl_ES]=Administra os axustes do bloqueo de pantalla Comment[hr]=Upravljajte postavkama zaključavanja zaslona Comment[hu]=Képernyőzárolás beállítások kezelése Comment[hu_HU]=Képernyőzárolás beállítások kezelése Comment[ia]=Gerer le preferentias de loco de schermo Comment[id]=Mengatur setelan kunci layar Comment[id_ID]=Mengatur setelan kunci layar Comment[is]=Sýsla með stillingar skjálæsingar Comment[it]=Gestisci impostazioni di blocco dello schermo Comment[it_CH]=Gestisci impostazioni di blocco dello schermo Comment[it_IT]=Gestisci impostazioni di blocco dello schermo Comment[ja]=スクリーンロック管理の設定 Comment[ja_JP]=スクリーンロック管理の設定 Comment[ko]=화면 잠금 설정 Comment[ko_KR]=화면 잠금 설정 Comment[lt]=Tvarkyti ekrano užrakto nustatymus Comment[lt_LT]=Tvarkyti ekrano užrakto nustatymus Comment[lv]=Pārvaldīt ekrāna bloķēšanas uzstādījumus Comment[lv_LV]=Pārvaldīt ekrāna bloķēšanas uzstādījumus Comment[ms]=Mengurus tetapan kunci skrin Comment[ms_MY]=Mengurus tetapan kunci skrin Comment[nb]=Håndter innstillinger for skjermlås Comment[nb_NO]=Håndter innstillinger for skjermlås Comment[nds]=Bildschirmsperren-Einstellungen bearbeiten Comment[nl]=Instellingen voor schermvergrendeling beheren Comment[nl_NL]=Instellingen voor schermvergrendeling beheren Comment[oc]=Gerir los paramètres de verrolhatge d'ecran Comment[pl]=Zarządzaj ustawieniami blokady ekranu Comment[pl_PL]=Zarządzaj ustawieniami blokady ekranu Comment[pt]=Gerir definições de bloqueio de ecrã Comment[pt_BR]=Gerenciar configurações de bloqueio de tela Comment[pt_PT]=Gerir definições de bloqueio de ecrã Comment[ro]=Gestionează setările blocării ecranului Comment[ro_RO]=Gestionează setările blocării ecranului Comment[ru]=Настройка блокировки экрана Comment[sk]=Spravovať nastavenia uzamykania obrazovky Comment[sk_SK]=Spravovať nastavenia uzamykania obrazovky Comment[sl]=Upravljajte z nastavitvami zaklepa zaslona Comment[sl_SI]=Upravljajte z nastavitvami zaklepa zaslona Comment[sq]=Menaxhoni parametrat e bllokimit të ekranit Comment[sr]=Управљање поставкама закључавања екрана Comment[sr@Latn]=Управљање поставкама закључавања екрана Comment[sr@ije]=Управљање поставкама закључавања екрана Comment[sr@ijekavianlatin]=Управљање поставкама закључавања екрана Comment[sr@latin]=Управљање поставкама закључавања екрана Comment[sr_RS]=Управљање поставкама закључавања екрана Comment[sr_RS@latin]=Управљање поставкама закључавања екрана Comment[sv]=Hantera skärmlåsinställningar Comment[tg]=Идоракунии танзимоти қулфи экран Comment[th]=จัดการการตั้งค่าการล็อกหน้าจอ Comment[th_TH]=จัดการการตั้งค่าการล็อกหน้าจอ Comment[tr]=Ekran kilidi seçeneklerini yönet Comment[tr_TR]=Ekran kilidi seçeneklerini yönet Comment[uk]=Керування налаштуваннями блокування екрану Comment[uk_UA]=Керування налаштуваннями блокування екрану Comment[ur]=سکرین قفل کی ترتیبات کا انتظام Comment[vi]=QUản lý thiết đặt khoá màn hình Comment[vi_VN]=QUản lý thiết đặt khoá màn hình Comment[zh_CN]=管理锁屏设置 Comment[zh_HK]=管理熒幕鎖定設定 Comment[zh_TW]=管理螢幕鎖定設定 Keywords=screensaver;lock;password;away;message; Keywords[am]=መመልከቻውን ማዳኛ፡ መቆለፊያ፡ የነግቢያ ቃል፡ የለሁም፡ መልእክት; Keywords[ar]=شاشة التوقف، والقفل، كلمة السر، بعيدا، رسالة; Keywords[ast]=curiapantalles;bloquiar;contraseña;ausencia;mensaxe; Keywords[be]=застаўка;блакiраванне;пароль;назад;паведамленне; Keywords[be@latin]=застаўка;блакiраванне;пароль;назад;паведамленне; Keywords[be_BY]=застаўка;блакiраванне;пароль;назад;паведамленне; Keywords[bg]=предпазител на екрана;заключване;парола;нямя ме;съобщение; Keywords[bg_BG]=предпазител на екрана;заключване;парола;нямя ме;съобщение; Keywords[bs]=čuvar ekrana;zaključavanje;šifra;odsutan;poruka; Keywords[ca]=estalvi de pantalla;bloqueig;contrasenya;absent;missatge; Keywords[ca@valencia]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[ca_ES]=estalvi de pantalla;bloqueig;contrasenya;absent;missatge; Keywords[ca_ES@valencia]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[cs]=spořič;zámek;heslo;nepřítomnost;zpráva; Keywords[cs_CZ]=spořič;zámek;heslo;nepřítomnost;zpráva; Keywords[cy]=arbedwr sgrin;clo;cyfrinair;i ffwrdd;neges; Keywords[da]=pauseskærm;lås;adgangskode;fraværende;besked; Keywords[da_DK]=pauseskærm;lås;adgangskode;fraværende;besked; Keywords[de]=screensaver;lock;password;away;message;Bildschirmschoner;Sperre;Passwort;Abwesenheit;Nachricht; Keywords[de_CH]=screensaver;lock;password;away;message;Bildschirmschoner;Sperre;Passwort;Abwesenheit;Nachricht; Keywords[de_DE]=screensaver;lock;password;away;message;Bildschirmschoner;Sperre;Passwort;Abwesenheit;Nachricht; Keywords[el]=προφύλαξη οθόνης;κλείδωμα;κωδικός πρόσβασης;μακριά;μήνυμα; Keywords[es]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_AR]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_CL]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_CO]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_CR]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_DO]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_EC]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_ES]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_MX]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_NI]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_PA]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_PE]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_PR]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_SV]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_UY]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[es_VE]=salvapantallas;bloqueo;contraseña;ausente;mensaje; Keywords[eu]=pantaila-babeslea;blokeatu;pasahitza;kanpoan;mezua; Keywords[fi]=näytönsäästäjä;lukitus;salasana;poissa;viesti; Keywords[fi_FI]=näytönsäästäjä;lukitus;salasana;poissa;viesti; Keywords[fr]=écran de veille;verrouillage;mot de passe;absent;message; Keywords[fr_CA]=écran de veille;verrouillage;mot de passe;absent;message; Keywords[fr_FR]=écran de veille;verrouillage;mot de passe;absent;message; Keywords[gd]=screensaver;lock;password;away;message;sàbhalaiche-sgrìn;glas;glais;glasadh;facal-faire;air falbh;teachdaireachd; Keywords[gl]=protector de pantalla;bloqueo;contrasinal;ausente;mensaxe; Keywords[gl_ES]=protector de pantalla;bloqueo;contrasinal;ausente;mensaxe; Keywords[hr]=čuvar zaslona;zaključaj;lozinka;odsutan;poruka; Keywords[hu]=képernyővédő;lezárás;jelszó;nincs a gépnél;távol;üzenet; Keywords[hu_HU]=képernyővédő;lezárás;jelszó;nincs a gépnél;távol;üzenet; Keywords[ia]=lanceamento initial;programmas;lanceamento initial;init;session; Keywords[id]=screensaver;kunci;kata sandi;diluar;pesan; Keywords[id_ID]=screensaver;kunci;kata sandi;diluar;pesan; Keywords[is]=skjáhvíla;læsing;lykilorð;fjarvera;skilaboð; Keywords[it]=Screensaver;Blocca;Password;Assenza;Messaggio; Keywords[it_CH]=Screensaver;Blocca;Password;Assenza;Messaggio; Keywords[it_IT]=Screensaver;Blocca;Password;Assenza;Messaggio; Keywords[kab]=agdil n usuḍes;sekker;awal uffir;yugeg;izen; Keywords[ko]=화면 보호기;잠금;비밀번호;외출중;메시지; Keywords[ko_KR]=화면 보호기;잠금;비밀번호;외출중;메시지; Keywords[lv]=ekrānsaudzētājs;slēgt;parole;prom;ziņa; Keywords[lv_LV]=ekrānsaudzētājs;slēgt;parole;prom;ziņa; Keywords[ms]=penjimat skrin;kunci;kata laluan;jauh;mesej; Keywords[ms_MY]=penjimat skrin;kunci;kata laluan;jauh;mesej; Keywords[nb]=skjermsparer;lås;passord;borte;beskjed; Keywords[nb_NO]=skjermsparer;lås;passord;borte;beskjed; Keywords[nds]=Bildschirmschoner;Sperre;Passwort;weg;Nachricht; Keywords[nl]=schermbeveiliging;vergrendelen;wachtwoord;afwezig;boodschap; Keywords[nl_NL]=schermbeveiliging;vergrendelen;wachtwoord;afwezig;boodschap; Keywords[pl]=wygaszacz ekranu;blokada;hasło;nieobecność;komunikat; Keywords[pl_PL]=wygaszacz ekranu;blokada;hasło;nieobecność;komunikat; Keywords[pt]=protetor de ecrã;bloqueio;senha;palavra;passe;fora;mensagem; Keywords[pt_BR]=protetor de tela;bloqueio;senha;ausente;mensagem; Keywords[pt_PT]=protetor de ecrã;bloqueio;senha;palavra;passe;fora;mensagem; Keywords[ro]=protector de ecran;blocare;parolă;departe;mesaj; Keywords[ro_RO]=protector de ecran;blocare;parolă;departe;mesaj; Keywords[ru]=заставка;блокировка;пароль;отсутствие;сообщение; Keywords[sk]=šetrič obrazovky;uzamykanie;heslo;neprítomný;odkaz; Keywords[sk_SK]=šetrič obrazovky;uzamykanie;heslo;neprítomný;odkaz; Keywords[sl]=ohranjevalnik zaslona;zakleni;geslo;odsoten;sporočilo; Keywords[sl_SI]=ohranjevalnik zaslona;zakleni;geslo;odsoten;sporočilo; Keywords[sr]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr@Latn]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr@ije]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr@ijekavianlatin]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr@latin]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr_RS]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sr_RS@latin]=чувар екрана;закључај;лозинка;порука;одјава; Keywords[sv]=skärmsläckare;lås;lösenord;frånvaro;meddelande; Keywords[tg]=пардаи экран;қулф;парол;ғоиб;паём; Keywords[th]=หน้าจอพัก;ล็อก;รหัสผ่าน;ข้อความเมื่อไม่อยู่;ข้อความ; Keywords[th_TH]=หน้าจอพัก;ล็อก;รหัสผ่าน;ข้อความเมื่อไม่อยู่;ข้อความ; Keywords[tr]=ekran koruyucu;kilit;şifre;dışarıda;mesaj; Keywords[tr_TR]=ekran koruyucu;kilit;şifre;dışarıda;mesaj; Keywords[uk]=зберігач екрану;блокування;гасло;відійшов;повідомлення; Keywords[uk_UA]=зберігач екрану;блокування;гасло;відійшов;повідомлення; Keywords[ur]=سکرین محافظ، قفل، پاسورڈ، دور، پیغام; Keywords[vi]=bảo vệ màn hình;khoá;mật khẩu;vắng;lời nhắn; Keywords[vi_VN]=bảo vệ màn hình;khoá;mật khẩu;vắng;lời nhắn; Keywords[zh_CN]=屏保,锁定,密码,离开,消息; Keywords[zh_HK]=熒幕保護程式;鎖定;密碼;離開;訊息; Keywords[zh_TW]=螢幕保護程式;鎖定;密碼;離開;訊息; Cinnamon-3.6.7/files/usr/share/applications/cinnamon-killer-daemon.desktop0000664000175000017500000000031013215735076025641 0ustar fabiofabio[Desktop Entry] Name=Cinnamon Killer Daemon Comment=Restarts Cinnamon and Nemo when a key combination is pressed Icon=reload Exec=cinnamon-killer-daemon Terminal=false Type=Application NoDisplay=true Cinnamon-3.6.7/files/usr/share/cinnamon/0000775000175000017500000000000013215735076017045 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/0000775000175000017500000000000013215735076020515 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/settings@cinnamon.org/0000775000175000017500000000000013215735076024766 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/settings@cinnamon.org/metadata.json0000664000175000017500000000023313215735076027437 0ustar fabiofabio{ "uuid": "settings@cinnamon.org", "name": "Settings Applet", "description": "Cinnamon Settings", "icon": "preferences-system", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/settings@cinnamon.org/applet.js0000664000175000017500000000247613215735076026622 0ustar fabiofabioconst Applet = imports.ui.applet; const Panel = imports.ui.panel; const PopupMenu = imports.ui.popupMenu; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("go-up"); this.set_applet_tooltip(_("Settings")); this.menuManager = new PopupMenu.PopupMenuManager(this); this._buildMenu(orientation); } catch (e) { global.logError(e); } }, on_applet_clicked: function(event) { this.menu.toggle(); }, _buildMenu: function(orientation) { this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); Panel.populateSettingsMenu(this.menu); }, on_orientation_changed: function(orientation){ this.menu.destroy(); this._buildMenu(orientation); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/settings-example@cinnamon.org/0000775000175000017500000000000013215735076026417 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/settings-example@cinnamon.org/settings-schema.json0000664000175000017500000001555113215735076032417 0ustar fabiofabio{ "layout1": { "type": "layout", "pages": ["page1", "page2", "page3", "page4"], "page1": { "type": "page", "title": "Visible settings", "sections": ["section1", "section2"] }, "page2": { "type": "page", "title": "Choosers", "sections": ["section3", "section4", "section6"] }, "page3": { "type": "page", "title": "Command settings", "sections": ["section5"] }, "page4": { "type": "page", "title": "Editable list settings", "sections": ["section7"] }, "section1": { "type": "section", "title": "Panel settings", "keys": ["icon-name", "use-custom-label", "custom-label", "color", "spinner-number"] }, "section3": { "type": "section", "title": "File choosers", "keys": ["file-select", "directory-select", "sound-select"] }, "section2": { "type": "section", "title": "Menu settings", "keys": ["combo-selection", "scale-demo"] }, "section4": { "type": "section", "title": "Animation settings", "keys": ["tween-function", "effect-style"] }, "section5": { "type": "section", "title": "Command settings", "keys": ["signal-test", "keybinding-test", "demo-button", "long-text"] }, "section6": { "type": "section", "title": "Other choosers", "keys": ["font-select", "date-select"] }, "section7": { "type": "section", "title": "My list", "keys": ["tree"] } }, "icon-name": { "type": "iconfilechooser", "default" : "help", "description" : "The icon to use in the panel", "tooltip" : "Select an icon file, or you can type an icon name into the entry box" }, "color" : { "type": "colorchooser", "default" : "grey", "description" : "The background color for the applet", "tooltip" : "Click the button to select a new background color for this applet" }, "spinner-number" : { "type": "spinbutton", "default" : 250, "min" : 0, "max" : 400, "step" : 5, "units" : "pixels", "description" : "Applet width in the panel", "tooltip" : "Increase or decrease this spinner value to make the applet wider or narrower in the panel" }, "combo-selection" : { "type": "combobox", "default" : "option 1", "description" : "Please pick an option", "options" : { "First Choice" : "option 1", "Second Choice" : "option 2", "Third Choice" : "option 3", "Fourth Choice" : "option 4" }, "tooltip" : "A combo selection can select between int, boolean, float, and string values" }, "scale-demo" : { "type" : "scale", "default" : 0.5, "min" : 0.0, "max" : 1.0, "step" : 0.05, "show-value" : false, "description" : "Here is a demonstration of bidirectional control", "tooltip" : "If you adjust this scale, it updates in the applet. If you adjust the scale in the applet, it updates here" }, "use-custom-label" : { "type" : "switch", "default" : false, "description": "Check this to use a custom label", "tooltip": "Checking this box allows you to set a custom label in the field below - this demonstrates setting dependencies" }, "custom-label" : { "type" : "entry", "default" : "custom", "description" : "Custom Applet Label", "indent": true, "dependency" : "use-custom-label", "tooltip" : "Set your custom label here. This field is unavailable unless the switch above is enabled" }, "tween-function" : { "type" : "tween", "default" : "EaseNone", "description" : "Animation type", "tooltip": "A tween chooser has as value a string, which you can pass as transition to Tweener.addTween()" }, "effect-style" : { "type" : "effect", "description" : "Effect type", "default" : "none", "possible" : ["none", "scale", "fade", "blend", "move", "flyUp", "flyDown", "traditional"] }, "demo-button" : { "type" : "button", "description" : "Don't Press This Button!!!", "callback" : "on_config_button_pressed", "tooltip" : "Pressing this button activates a callback method in the applet - go ahead, press it." }, "signal-test" : { "type" : "switch", "description" : "This is a test widget for individual key signal firing", "default" : false }, "keybinding-test" : { "type" : "keybinding", "description" : "Set the keybinding here to activate an action", "default" : "F8" }, "file-select" : { "type" : "filechooser", "description" : "Choose a file", "default" : "~/", "select-dir" : false }, "directory-select" : { "type" : "filechooser", "description" : "Choose a directory", "default" : "", "select-dir" : true }, "sound-select" : { "type" : "soundfilechooser", "description" : "Choose a sound", "default" : "" }, "font-select" : { "type" : "fontchooser", "description" : "Choose a font", "default" : "sans 12" }, "long-text" : { "type" : "textview", "description" : "You can type paragraphs and lists here", "default" : "", "tooltip" : "This setting type is useful for multi-line lists, and text that is too long to fit in an entry widget.\nYou can manually set the height of the text view with the 'height' property. This one is set to 150. Default is 200.", "height" : 150 }, "date-select" : { "type" : "datechooser", "description" : "Choose a Date", "default" : { "d" : 1, "m" : 1, "y" : 2000 } }, "tree" : { "type" : "list", "description" : "Custom tree widget", "columns" : [ {"id": "name", "title": "Name", "type": "string"}, {"id": "resident", "title": "Resident", "type": "boolean"}, {"id": "address", "title": "Address", "type": "string", "default": "none"}, {"id": "number", "title": "Id number", "type": "integer", "min": 0, "max": 100}, {"id": "icon", "title": "Icon", "type": "icon"}, {"id": "key", "title": "Shortcut key", "type": "keybinding"}, {"id": "file", "title": "File Path", "type": "file", "select-dir": false} ], "default" : [] } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/settings-example@cinnamon.org/metadata.json0000664000175000017500000000037013215735076031072 0ustar fabiofabio{ "uuid": "settings-example@cinnamon.org", "name": "Settings API Demo", "description": "A sample applet for demonstrating the capabilities and usage of the applet and desklet settings API", "icon": "preferences-desktop", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/settings-example@cinnamon.org/applet.js0000664000175000017500000001462013215735076030245 0ustar fabiofabioconst Applet = imports.ui.applet; const Lang = imports.lang; const PopupMenu = imports.ui.popupMenu; const Mainloop = imports.mainloop; const Settings = imports.ui.settings; // Needed for settings API const Gio = imports.gi.Gio; const Tweener = imports.ui.tweener; const Main = imports.ui.main; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); // Be sure to pass instanceId from the main function } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); /* Initialize your settings handler instance this, the uuid instance id */ this.settings = new Settings.AppletSettings(this, "settings-example@cinnamon.org", instance_id); /* Now we'll proceed with setting up individual setting bindings. */ this.settings.bind("icon-name", // The setting key, from the setting schema file "icon_name", // The property to bind the setting to - in this case it will initialize this.icon_name to the setting value this.on_settings_changed, // The method to call when this.icon_name has changed, so you can update your applet null); // Any extra information you want to pass to the callback (optional - pass null or just leave out this last argument) this.settings.bind("scale-demo", "scale_val", this.on_settings_changed); this.settings.bind("color", "bg_color", this.on_settings_changed); this.settings.bind("spinner-number", "spinner_number", this.on_settings_changed); this.settings.bind("combo-selection", "combo_choice", this.on_settings_changed); this.settings.bind("use-custom-label", "use_custom", this.on_settings_changed); this.settings.bind("custom-label", "custom_label", this.on_settings_changed); this.settings.bind("tween-function", "tween_function", this.on_settings_changed); this.settings.bind("keybinding-test", "keybinding", this.on_keybinding_changed); this.settings.connect("changed::signal-test", Lang.bind(this, this.on_signal_test_fired)); /* Lets create and add our menu items - we'll set their true values after */ this.spinner_val_demo = new PopupMenu.PopupMenuItem(""); this.combo_val_demo = new PopupMenu.PopupMenuItem(""); this.slider_demo = new PopupMenu.PopupSliderMenuItem(0); this.slider_demo.connect("value-changed", Lang.bind(this, this.on_slider_changed)); this.menu.addMenuItem(this.spinner_val_demo); this.menu.addMenuItem(this.combo_val_demo); this.menu.addMenuItem(this.slider_demo); /* Let's set up our applet's initial state now that we have our setting properties defined */ this.on_keybinding_changed(); this.on_settings_changed(); }, on_keybinding_changed: function() { Main.keybindingManager.addHotKey("must-be-unique-id", this.keybinding, Lang.bind(this, this.on_hotkey_triggered)); }, on_settings_changed: function() { if (this.use_custom) { this.set_applet_label(this.custom_label); } else { this.set_applet_label(_("Hi there!")); } let icon_file = Gio.File.new_for_path(this.icon_name); if (icon_file.query_exists(null)) { this.set_applet_icon_path(this.icon_name); } else { this.set_applet_icon_name(this.icon_name); } this.spinner_val_demo.label.clutter_text.set_text("Spinner value is: " + this.spinner_number); this.combo_val_demo.label.clutter_text.set_text("Combo value is: " + this.combo_choice); this.slider_demo.setValue(this.scale_val); this.actor.style = "background-color:" + this.bg_color + "; width:" + this.spinner_number + "px"; }, on_signal_test_fired: function(setting_prov, key, oldval, newval) { global.logError("Test signal fired. Old value for key "+ key + " was " + oldval + ". New value is " + newval + "."); }, on_slider_changed: function(slider, value) { this.scale_val = value; // This is our BIDIRECTIONAL setting - by updating this.scale_val, // Our configuration file will also be updated }, /* This method is a callback that is defined by a button type in our settings file * This button will appear in the configuration dialog, and pressing it will call this method * This could useful to open a link to your web page, or just about anything you want */ on_config_button_pressed: function() { this.set_applet_label(_("YOU PRESSED THE BUTTON!!!")); let timeoutId = Mainloop.timeout_add(3000, Lang.bind(this, function() { this.on_settings_changed(); })); //animate icon Tweener.addTween(this._applet_icon, { margin_left: 10, time: 0.5, transition: this.tween_function, onComplete: function(){ Tweener.addTween(this._applet_icon, { margin_left: 0, time: 0.5, transition: this.tween_function }); }, onCompleteScope: this }); }, on_hotkey_triggered: function() { this.set_applet_label(_("YOU USED THE HOTKEY!!!")); let timeoutId = Mainloop.timeout_add(3000, Lang.bind(this, function() { this.on_settings_changed(); })); }, on_applet_clicked: function(event) { this.menu.toggle(); }, on_applet_removed_from_panel: function() { this.settings.finalize(); // This is called when a user removes the applet from the panel.. we want to // Remove any connections and file listeners here, which our settings object // has a few of } }; function main(metadata, orientation, panel_height, instance_id) { // Make sure you collect and pass on instanceId let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/separator@cinnamon.org/0000775000175000017500000000000013215735076025126 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/separator@cinnamon.org/metadata.json0000664000175000017500000000026013215735076027577 0ustar fabiofabio{ "uuid": "separator@cinnamon.org", "name": "Separator", "description": "A separator icon which can be added multiple times", "icon": "list-remove", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/separator@cinnamon.org/applet.js0000664000175000017500000000357013215735076026756 0ustar fabiofabioconst Applet = imports.ui.applet; const St = imports.gi.St; const Clutter = imports.gi.Clutter; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.Applet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.Applet.prototype._init.call(this, orientation, panel_height, instance_id); this.actor.style_class = 'applet-separator'; this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.on_orientation_changed(orientation); }, on_panel_height_changed: function() { this.on_orientation_changed(this.orientation); }, on_orientation_changed: function(neworientation) { this.orientation = neworientation; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) { if (this._line) { this._line.destroy(); } this._line = new St.BoxLayout({ style_class: 'applet-separator-line', reactive: false, track_hover: false}); this.actor.add(this._line, { y_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER, y_fill: true, y_expand: true}); } else { if (this._line) { this._line.destroy(); } this._line = new St.BoxLayout({ style_class: 'applet-separator-line-vertical', reactive: false, track_hover: false }); this._line.set_important(true); this.actor.add(this._line, { y_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER}); this._line.set_height(2); this._line.set_width((this._panelHeight - 8)); } }, }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/calendar@cinnamon.org/0000775000175000017500000000000013215735076024677 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/calendar@cinnamon.org/settings-schema.json0000664000175000017500000000215013215735076030666 0ustar fabiofabio{ "section1": { "type": "section", "description": "Display" }, "show-week-numbers" : { "type" : "switch", "default" : false, "description": "Show week numbers in calendar", "tooltip": "Check this to show week numbers in the calendar." }, "use-custom-format" : { "type" : "switch", "default" : false, "description": "Use a custom date format", "tooltip": "Check this to define a custom format for the date in the calendar applet." }, "custom-format" : { "type" : "entry", "default" : "%A %B %e, %H:%M", "description" : "Date format", "indent": true, "dependency" : "use-custom-format", "tooltip" : "Set your custom format here." }, "format-button" : { "type" : "button", "description" : "Show information on date format syntax", "indent": true, "dependency" : "use-custom-format", "callback" : "on_custom_format_button_pressed", "tooltip" : "Click this button to know more about the syntax for date formats." } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/calendar@cinnamon.org/calendar.js0000664000175000017500000003461213215735076027014 0ustar fabiofabio// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const Lang = imports.lang; const St = imports.gi.St; const Signals = imports.signals; const Pango = imports.gi.Pango; const Gettext_gtk30 = imports.gettext.domain('gtk30'); const Cinnamon = imports.gi.Cinnamon; const Settings = imports.ui.settings; const MSECS_IN_DAY = 24 * 60 * 60 * 1000; const WEEKDATE_HEADER_WIDTH_DIGITS = 3; const SHOW_WEEKDATE_KEY = 'show-week-numbers'; const FIRST_WEEKDAY_KEY = 'first-day-of-week'; const DESKTOP_SCHEMA = 'org.cinnamon.desktop.interface'; // in org.cinnamon.desktop.interface const CLOCK_FORMAT_KEY = 'clock-format'; function _sameDay(dateA, dateB) { return (dateA.getDate() == dateB.getDate() && dateA.getMonth() == dateB.getMonth() && dateA.getYear() == dateB.getYear()); } function _sameYear(dateA, dateB) { return (dateA.getYear() == dateB.getYear()); } /* TODO: maybe needs config - right now we assume that Saturday and * Sunday are non-work days (not true in e.g. Israel, it's Sunday and * Monday there) */ function _isWorkDay(date) { return date.getDay() != 0 && date.getDay() != 6; } function _getBeginningOfDay(date) { let ret = new Date(date.getTime()); ret.setHours(0); ret.setMinutes(0); ret.setSeconds(0); ret.setMilliseconds(0); return ret; } function _getEndOfDay(date) { let ret = new Date(date.getTime()); ret.setHours(23); ret.setMinutes(59); ret.setSeconds(59); ret.setMilliseconds(999); return ret; } function _formatEventTime(event, clockFormat) { let ret; if (event.allDay) { /* Translators: Shown in calendar event list for all day events * Keep it short, best if you can use less then 10 characters */ ret = C_("event list time", "All Day"); } else { switch (clockFormat) { case '24h': /* Translators: Shown in calendar event list, if 24h format */ ret = event.date.toLocaleFormat(C_("event list time", "%H:%M")); break; default: /* explicit fall-through */ case '12h': /* Transators: Shown in calendar event list, if 12h format */ ret = event.date.toLocaleFormat(C_("event list time", "%l:%M %p")); break; } } return ret; } function _getDigitWidth(actor){ let context = actor.get_pango_context(); let themeNode = actor.get_theme_node(); let font = themeNode.get_font(); let metrics = context.get_metrics(font, context.get_language()); let width = metrics.get_approximate_digit_width(); return width; } function _getCalendarDayAbbreviation(dayNumber) { // This returns an array of abbreviated day names, starting with Sunday. // We use 2014/03/02 (months are zero-based in JS) because it was a Sunday let abbreviations = [ new Date(2014, 2, 2).toLocaleFormat('%a'), new Date(2014, 2, 3).toLocaleFormat('%a'), new Date(2014, 2, 4).toLocaleFormat('%a'), new Date(2014, 2, 5).toLocaleFormat('%a'), new Date(2014, 2, 6).toLocaleFormat('%a'), new Date(2014, 2, 7).toLocaleFormat('%a'), new Date(2014, 2, 8).toLocaleFormat('%a') ]; return abbreviations[dayNumber]; } // Abstraction for an appointment/event in a calendar function CalendarEvent(date, end, summary, allDay) { this._init(date, end, summary, allDay); } CalendarEvent.prototype = { _init: function(date, end, summary, allDay) { this.date = date; this.end = end; this.summary = summary; this.allDay = allDay; } }; function _datesEqual(a, b) { if (a < b) return false; else if (a > b) return false; return true; } function _dateIntervalsOverlap(a0, a1, b0, b1) { if (a1 <= b0) return false; else if (b1 <= a0) return false; else return true; } function Calendar(settings) { this._init(settings); } Calendar.prototype = { _init: function(settings) { this._weekStart = Cinnamon.util_get_week_start(); this._weekdate = NaN; this._digitWidth = NaN; this.settings = settings; this.settings.bindWithObject(this, "show-week-numbers", "show_week_numbers", this._onSettingsChange); this.desktop_settings = new Gio.Settings({ schema_id: DESKTOP_SCHEMA }); this.desktop_settings.connect("changed::" + FIRST_WEEKDAY_KEY, Lang.bind(this, this._onSettingsChange)); // Find the ordering for month/year in the calendar heading let var_name = 'calendar:MY'; switch (Gettext_gtk30.gettext(var_name)) { case 'calendar:MY': this._headerMonthFirst = true; break; case 'calendar:YM': this._headerMonthFirst = false; break; default: log('Translation of "calendar:MY" in GTK+ is not correct'); this._headerMonthFirst = true; break; } // Start off with the current date this._selectedDate = new Date(); this.actor = new St.Table({ homogeneous: false, style_class: 'calendar', reactive: true }); this.actor.connect('scroll-event', Lang.bind(this, this._onScroll)); this._buildHeader (); }, _onSettingsChange: function(object, key, old_val, new_val) { if (key == FIRST_WEEKDAY_KEY) this._weekStart = Cinnamon.util_get_week_start(); this._buildHeader(); this._update(false); }, // Sets the calendar to show a specific date setDate: function(date, forceReload) { if (!_sameDay(date, this._selectedDate)) { this._selectedDate = date; this._update(forceReload); this.emit('selected-date-changed', new Date(this._selectedDate)); } else { if (forceReload) this._update(forceReload); } }, _buildHeader: function() { let offsetCols = this.show_week_numbers ? 1 : 0; this.actor.destroy_all_children(); // Top line of the calendar '<| September |> <| 2009 |>' this._topBoxMonth = new St.BoxLayout(); this._topBoxYear = new St.BoxLayout(); if (this._headerMonthFirst) { this.actor.add(this._topBoxMonth, {row: 0, col: 0, col_span: offsetCols + 4}); this.actor.add(this._topBoxYear, {row: 0, col: offsetCols + 4, col_span: 3}); } else { this.actor.add(this._topBoxMonth, {row: 0, col: offsetCols + 3, col_span: 4}); this.actor.add(this._topBoxYear, {row: 0, col: 0, col_span: offsetCols + 3}); } this.actor.connect('style-changed', Lang.bind(this, this._onStyleChange)); let back = new St.Button({ style_class: 'calendar-change-month-back' }); this._topBoxMonth.add(back); back.connect('clicked', Lang.bind(this, this._onPrevMonthButtonClicked)); this._monthLabel = new St.Label({style_class: 'calendar-month-label'}); this._topBoxMonth.add(this._monthLabel, { expand: true, x_fill: false, x_align: St.Align.MIDDLE }); let forward = new St.Button({ style_class: 'calendar-change-month-forward' }); this._topBoxMonth.add(forward); forward.connect('clicked', Lang.bind(this, this._onNextMonthButtonClicked)); back = new St.Button({style_class: 'calendar-change-month-back'}); this._topBoxYear.add(back); back.connect('clicked', Lang.bind(this, this._onPrevYearButtonClicked)); this._yearLabel = new St.Label({style_class: 'calendar-month-label'}); this._topBoxYear.add(this._yearLabel, {expand: true, x_fill: false, x_align: St.Align.MIDDLE}); forward = new St.Button({style_class: 'calendar-change-month-forward'}); this._topBoxYear.add(forward); forward.connect('clicked', Lang.bind(this, this._onNextYearButtonClicked)); // Add weekday labels... // // We need to figure out the abbreviated localized names for the days of the week; // we do this by just getting the next 7 days starting from right now and then putting // them in the right cell in the table. It doesn't matter if we add them in order let iter = new Date(this._selectedDate); iter.setSeconds(0); // Leap second protection. Hah! iter.setHours(12); for (let i = 0; i < 7; i++) { // Could use iter.toLocaleFormat('%a') but that normally gives three characters // and we want, ideally, a single character for e.g. S M T W T F S let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay()); let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading', text: customDayAbbrev }); this.actor.add(label, { row: 1, col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7, x_fill: false, x_align: St.Align.MIDDLE }); iter.setTime(iter.getTime() + MSECS_IN_DAY); } // All the children after this are days, and get removed when we update the calendar this._firstDayIndex = this.actor.get_n_children(); }, _onStyleChange: function(actor, event) { // width of a digit in pango units this._digitWidth = _getDigitWidth(this.actor) / Pango.SCALE; this._setWeekdateHeaderWidth(); }, _setWeekdateHeaderWidth: function() { if (this._digitWidth != NaN && this.show_week_numbers && this._weekdateHeader) { this._weekdateHeader.set_width (this._digitWidth * WEEKDATE_HEADER_WIDTH_DIGITS); } }, _onScroll : function(actor, event) { switch (event.get_scroll_direction()) { case Clutter.ScrollDirection.UP: case Clutter.ScrollDirection.LEFT: this._onPrevMonthButtonClicked(); break; case Clutter.ScrollDirection.DOWN: case Clutter.ScrollDirection.RIGHT: this._onNextMonthButtonClicked(); break; } }, _applyDateBrowseAction: function(yearChange, monthChange) { let oldDate = this._selectedDate; let newMonth = oldDate.getMonth() + monthChange; if (newMonth> 11) { yearChange = yearChange + 1; newMonth = 0; } else if (newMonth < 0) { yearChange = yearChange - 1; newMonth = 11; } let newYear = oldDate.getFullYear() + yearChange; let newDayOfMonth = oldDate.getDate(); let daysInMonth = 32 - new Date(newYear, newMonth, 32).getDate(); if (newDayOfMonth > daysInMonth) { newDayOfMonth = daysInMonth; } let newDate = new Date(); newDate.setFullYear(newYear, newMonth, newDayOfMonth); this.setDate(newDate, false); }, _onPrevYearButtonClicked: function() { this._applyDateBrowseAction(-1, 0); }, _onNextYearButtonClicked: function() { this._applyDateBrowseAction(+1, 0); }, _onPrevMonthButtonClicked: function() { this._applyDateBrowseAction(0, -1); }, _onNextMonthButtonClicked: function() { this._applyDateBrowseAction(0, +1); }, _update: function(forceReload) { let now = new Date(); this._monthLabel.text = this._selectedDate.toLocaleFormat('%B').capitalize(); this._yearLabel.text = this._selectedDate.toLocaleFormat('%Y'); // Remove everything but the topBox and the weekday labels let children = this.actor.get_children(); for (let i = this._firstDayIndex; i < children.length; i++) children[i].destroy(); // Start at the beginning of the week before the start of the month let beginDate = new Date(this._selectedDate); beginDate.setDate(1); beginDate.setSeconds(0); beginDate.setHours(12); let daysToWeekStart = (7 + beginDate.getDay() - this._weekStart) % 7; beginDate.setTime(beginDate.getTime() - daysToWeekStart * MSECS_IN_DAY); let iter = new Date(beginDate); let row = 2; while (true) { let button = new St.Button({ label: iter.getDate().toString() }); button.reactive = false; let iterStr = iter.toUTCString(); button.connect('clicked', Lang.bind(this, function() { let newlySelectedDate = new Date(iterStr); this.setDate(newlySelectedDate, false); })); let styleClass = 'calendar-day-base calendar-day'; if (_isWorkDay(iter)) styleClass += ' calendar-work-day' else styleClass += ' calendar-nonwork-day' // Hack used in lieu of border-collapse - see cinnamon.css if (row == 2) styleClass = 'calendar-day-top ' + styleClass; if (iter.getDay() == this._weekStart) styleClass = 'calendar-day-left ' + styleClass; if (_sameDay(now, iter)) styleClass += ' calendar-today'; else if (iter.getMonth() != this._selectedDate.getMonth()) styleClass += ' calendar-other-month-day'; if (_sameDay(this._selectedDate, iter)) button.add_style_pseudo_class('active'); button.style_class = styleClass; let offsetCols = this.show_week_numbers ? 1 : 0; this.actor.add(button, { row: row, col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7 }); if (this.show_week_numbers && iter.getDay() == 4) { let label = new St.Label({ text: iter.toLocaleFormat('%V'), style_class: 'calendar-day-base calendar-week-number'}); this.actor.add(label, { row: row, col: 0, y_align: St.Align.MIDDLE }); } iter.setTime(iter.getTime() + MSECS_IN_DAY); if (iter.getDay() == this._weekStart) { row++; // We always stop after placing 6 rows, even if month fits in 4 // to prevent issues with jumping controls, see #226 if (row > 7) { break; } } } } }; Signals.addSignalMethods(Calendar.prototype); Cinnamon-3.6.7/files/usr/share/cinnamon/applets/calendar@cinnamon.org/metadata.json0000664000175000017500000000023613215735076027353 0ustar fabiofabio{ "uuid": "calendar@cinnamon.org", "name": "Calendar", "description": "The Cinnamon calendar applet", "icon": "x-office-calendar", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/calendar@cinnamon.org/applet.js0000664000175000017500000001671113215735076026530 0ustar fabiofabioconst Applet = imports.ui.applet; const Gio = imports.gi.Gio; const Lang = imports.lang; const Clutter = imports.gi.Clutter; const St = imports.gi.St; const Util = imports.misc.util; const PopupMenu = imports.ui.popupMenu; const UPowerGlib = imports.gi.UPowerGlib; const Settings = imports.ui.settings; const Calendar = imports.applets['calendar@cinnamon.org'].calendar; const CinnamonDesktop = imports.gi.CinnamonDesktop; String.prototype.capitalize = function() { return this.charAt(0).toUpperCase() + this.slice(1); } function _onVertSepRepaint (area) { let cr = area.get_context(); let themeNode = area.get_theme_node(); let [width, height] = area.get_surface_size(); let stippleColor = themeNode.get_color('-stipple-color'); let stippleWidth = themeNode.get_length('-stipple-width'); let x = Math.floor(width/2) + 0.5; cr.moveTo(x, 0); cr.lineTo(x, height); Clutter.cairo_set_source_color(cr, stippleColor); cr.setDash([1, 3], 1); // Hard-code for now cr.setLineWidth(stippleWidth); cr.stroke(); cr.$dispose(); }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.TextApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.TextApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this.menuManager = new PopupMenu.PopupMenuManager(this); this.orientation = orientation; this._initContextMenu(); // Date this._date = new St.Label(); this._date.style_class = 'datemenu-date-label'; this.menu.addActor(this._date); this.settings = new Settings.AppletSettings(this, "calendar@cinnamon.org", this.instance_id); // Calendar this._calendar = new Calendar.Calendar(this.settings); this.menu.addActor(this._calendar.actor); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); let item = new PopupMenu.PopupMenuItem(_("Date and Time Settings")) item.connect("activate", Lang.bind(this, this._onLaunchSettings)); this.menu.addMenuItem(item); this._dateFormatFull = _("%A %B %-e, %Y"); this.settings.bind("use-custom-format", "use_custom_format", this._onSettingsChanged); this.settings.bind("custom-format", "custom_format", this._onSettingsChanged); /* FIXME: Add gobject properties to the WallClock class to allow easier access from * its clients, and possibly a separate signal to notify of updates to these properties * (though GObject "changed" would be sufficient.) */ this.desktop_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.interface" }); this.desktop_settings.connect("changed::clock-use-24h", Lang.bind(this, function(key) { this._onSettingsChanged(); })); this.desktop_settings.connect("changed::clock-show-seconds", Lang.bind(this, function(key) { this._onSettingsChanged(); })); this.clock = new CinnamonDesktop.WallClock(); this.clock_notify_id = 0; // https://bugzilla.gnome.org/show_bug.cgi?id=655129 this._upClient = new UPowerGlib.Client(); try { this._upClient.connect('notify-resume', Lang.bind(this, this._updateClockAndDate)); } catch (e) { this._upClient.connect('notify::resume', Lang.bind(this, this._updateClockAndDate)); } } catch (e) { global.logError(e); } }, _clockNotify: function(obj, pspec, data) { this._updateClockAndDate(); }, on_applet_clicked: function(event) { this.menu.toggle(); }, _onSettingsChanged: function() { this._updateFormatString(); this._updateClockAndDate(); }, on_custom_format_button_pressed: function() { Util.spawnCommandLine("xdg-open http://www.foragoodstrftime.com/"); }, _onLaunchSettings: function() { this.menu.close(); Util.spawnCommandLine("cinnamon-settings calendar"); }, _updateFormatString: function() { let in_vertical_panel = (this.orientation == St.Side.LEFT || this.orientation == St.Side.RIGHT); if (this.use_custom_format) { if (!this.clock.set_format_string(this.custom_format)) { global.logError("Calendar applet: bad time format string - check your string."); this.clock.set_format_string("~CLOCK FORMAT ERROR~ %l:%M %p"); } } else if (in_vertical_panel) { let use_24h = this.desktop_settings.get_boolean("clock-use-24h"); let show_seconds = this.desktop_settings.get_boolean("clock-show-seconds"); if (use_24h) { if (show_seconds) { this.clock.set_format_string("%H%n%M%n%S"); } else { this.clock.set_format_string("%H%n%M%"); } } else { if (show_seconds) { this.clock.set_format_string("%l%n%M%n%S"); } else { this.clock.set_format_string("%l%n%M%"); } } } else { this.clock.set_format_string(null); } }, _updateClockAndDate: function() { let label_string = this.clock.get_clock(); if (!this.use_custom_format) { label_string = label_string.capitalize(); } this.set_applet_label(label_string); /* Applet content - st_label_set_text and set_applet_tooltip both compare new to * existing strings before proceeding, so no need to check here also */ let dateFormattedFull = this.clock.get_clock_for_format(this._dateFormatFull).capitalize(); this._date.set_text(dateFormattedFull); this.set_applet_tooltip(dateFormattedFull); }, on_applet_added_to_panel: function() { this._onSettingsChanged(); if (this.clock_notify_id == 0) { this.clock_notify_id = this.clock.connect("notify::clock", () => this._clockNotify()); } /* Populates the calendar so our menu allocation is correct for animation */ this._updateCalendar(); }, on_applet_removed_from_panel: function() { if (this.clock_notify_id > 0) { this.clock.disconnect(this.clock_notify_id); this.clock_notify_id = 0; } }, _initContextMenu: function () { this.menu = new Applet.AppletPopupMenu(this, this.orientation); this.menuManager.addMenu(this.menu); // Whenever the menu is opened, select today this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) { if (isOpen) { this._updateCalendar(); } })); }, _updateCalendar: function () { let now = new Date(); this._calendar.setDate(now, true); }, on_orientation_changed: function (orientation) { this.orientation = orientation; this.menu.setOrientation(orientation); this._onSettingsChanged(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/0000775000175000017500000000000013215735076024215 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/settings-schema.json0000664000175000017500000000017313215735076030207 0ustar fabiofabio{ "activate-on-hover": { "type": "switch", "default" : false, "description" : "Activate scale on hover" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/icons/0000775000175000017500000000000013215735076025330 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/icons/cinnamon-scale-symbolic.svg0000664000175000017500000000105713215735076032562 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/metadata.json0000664000175000017500000000022713215735076026671 0ustar fabiofabio{ "uuid": "scale@cinnamon.org", "name": "Scale", "description": "Click or hover to activate Scale view", "icon": "cs-overview", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/scale@cinnamon.org/applet.js0000664000175000017500000000310413215735076026036 0ustar fabiofabioconst Applet = imports.ui.applet; const Lang = imports.lang; const Main = imports.ui.main; const Settings = imports.ui.settings; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("cinnamon-scale"); this.set_applet_tooltip(_("Scale")); this._hover_activates = false; this.settings = new Settings.AppletSettings(this, metadata.uuid, this.instance_id); this.settings.bind("activate-on-hover", "_hover_activates"); this.actor.connect('enter-event', Lang.bind(this, this._onEntered)); } catch (e) { global.logError(e); } }, on_applet_clicked: function(event) { if (this._hover_activates) return; this.doAction(); }, _onEntered: function(event) { if (!this._hover_activates || global.settings.get_boolean("panel-edit-mode")) return; this.doAction(); }, doAction: function() { if (!Main.overview.animationInProgress) Main.overview.toggle(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/window-list@cinnamon.org/0000775000175000017500000000000013215735076025406 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/window-list@cinnamon.org/settings-schema.json0000664000175000017500000000237613215735076031407 0ustar fabiofabio{ "section1": { "type": "section", "description": "Behavior" }, "show-all-workspaces" : { "type" : "switch", "default" : false, "description": "Show windows from all workspaces" }, "enable-alerts" : { "type" : "switch", "default" : true, "description" : "Show an alert in the window list when a window from another workspace requires attention" }, "enable-scrolling" : { "type" : "switch", "default" : false, "description" : "Enable mouse-wheel scrolling in the window list" }, "reverse-scrolling" : { "type" : "switch", "default" : false, "description" : "Reverse the direction of mouse-wheel scrolling in the window list", "dependency" : "enable-scrolling" }, "middle-click-close": { "type": "switch", "default": true, "description": "Middle click to close window" }, "section2": { "type": "section", "description": "Display" }, "buttons-use-entire-space": { "type": "switch", "default": false, "description": "Window buttons can have different sizes and use the entire space available" }, "window-preview": { "type": "switch", "default": true, "description": "Show window thumbnails on hover" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/window-list@cinnamon.org/metadata.json0000664000175000017500000000024413215735076030061 0ustar fabiofabio{ "uuid": "window-list@cinnamon.org", "name": "Window list", "description": "Main Cinnamon window list", "icon": "gnome-window-manager", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/window-list@cinnamon.org/applet.js0000664000175000017500000015332313215735076027240 0ustar fabiofabio/* Window-list applet * * The applet code consists of four main object. WindowPreview, AppMenuButton, * AppMenuButtonRightClickMenu and the main applet code. * * The main applet object listens to different events and updates the window * list accordingly. Since addition/removal of windows is emitted by the * workspace, we have to listen to the changes to the number of workspaces and * update our signals accordingly as well. It also listens to the change in * window state (eg tile/maximize) since the window titles are displayed * differently in the AppMenuButton for each different state, eg minimized * windows are shown as [Title]. * * For each window the main applet object wants to show, an AppMenuButton is * created. This is created for every window in the monitors it is responsible * for, regardless of whether it is on the active workspace. Individual applet * objects are then shown/hidden according to which workspace they are in. * * The AppMenuButton is responsible for managing its own appearance using a * CinnamonGenericContainer. We manage the allocation ourselves and shrink the * label when there isn't enough space in the panel (the space available is * divided among all AppMenuButtons and each is told how much space they can * use through the "allocate" signal). It also has an onFocus function that the * main applet calls when a window is focused. * * When a window is marked urgent or demand attention ("urgent" windows are not * more important that those demanding attention. These are two unrelated * notions in different specifications that both mean approximately the same * thing), we will ask the AppMenuButton to flash. If the window is from a * separate workspace, we generate a new temporary AppMenuButton and add it to * our actor box. It stops flashing when the onFocus function is called (and if * the window is indeed focused) (destroyed in the case of temporary * AppMenuButtons). * * The AppMenuButtonRightClickMenu is, as the name suggests, the right click * menu of the AppMenuButton. The menu is generated every time the button is * right-clicked, since this rarely happens and generating all at the beginning * would be a waste of time/memory. This also saves us from having to listen to * signals for changes in workspace/monitor etc. * * Finally, the WindowPreview object is a tooltip that shows a preview of the * window. Users can opt to show a window preview (using this), or the title * (using Tooltips.PanelItemTooltip) in the tooltip. The window preview is * generated on the fly when needed instead of cached. */ const Cinnamon = imports.gi.Cinnamon; const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const Gdk = imports.gi.Gdk; const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; const St = imports.gi.St; const Applet = imports.ui.applet; const AppletManager = imports.ui.appletManager; const DND = imports.ui.dnd; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const Settings = imports.ui.settings; const SignalManager = imports.misc.signalManager; const Tooltips = imports.ui.tooltips; const HORIZONTAL_ICON_SIZE = 16; // too bad this can't be defined in theme (cinnamon-app.create_icon_texture returns a clutter actor, not a themable object - // probably something that could be addressed const ICON_HEIGHT_FACTOR = 0.64; const VERTICAL_ICON_HEIGHT_FACTOR = 0.75; const MAX_TEXT_LENGTH = 1000; const FLASH_INTERVAL = 500; const WINDOW_PREVIEW_WIDTH = 200; const WINDOW_PREVIEW_HEIGHT = 150; function WindowPreview(item, metaWindow) { this._init(item, metaWindow); } WindowPreview.prototype = { __proto__: Tooltips.TooltipBase.prototype, _init: function(item, metaWindow) { Tooltips.TooltipBase.prototype._init.call(this, item.actor); this._applet = item._applet; // FIXME: there is quite a bit of hardcoding in this part of the code, would benefit from setting up separate CSS // and getting rid of the hard-coding. this.actor = new St.Bin({style_class: "switcher-list", style: "margin: 0px; padding: 8px;"}); this.actor.show_on_set_parent = false; this.scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; this.actor.set_size(WINDOW_PREVIEW_WIDTH * 1.2 * this.scaleFactor, WINDOW_PREVIEW_HEIGHT * 1.2 * this.scaleFactor); Main.uiGroup.add_actor(this.actor); this.metaWindow = metaWindow; this.muffinWindow = null; this._sizeChangedId = null; let box = new St.BoxLayout({ vertical: true }); let hbox = new St.BoxLayout(); let iconBox = new St.Bin(); let tracker = Cinnamon.WindowTracker.get_default(); let app = tracker.get_window_app(this.metaWindow); let icon = app ? app.create_icon_texture(16) : new St.Icon({ icon_name: 'application-default-icon', icon_type: St.IconType.FULLCOLOR, icon_size: 16 }); iconBox.set_child(icon); hbox.add_actor(iconBox); this.label = new St.Label(); this.label.style = "padding: 2px;"; hbox.add_actor(this.label); box.add_actor(hbox); this.thumbnailBin = new St.Bin(); box.add_actor(this.thumbnailBin); this.actor.set_child(box); }, _onEnterEvent: function(actor, event) { if (this._applet._tooltipShowing) this.show(); else if (!this._showTimer) this._showTimer = Mainloop.timeout_add(300, Lang.bind(this, this._onShowTimerComplete)); this.mousePosition = event.get_coords(); }, _hide: function(actor, event) { Tooltips.TooltipBase.prototype._hide.call(this, actor, event); this._applet.erodeTooltip(); }, show: function() { if (!this.actor || this._applet._menuOpen) return; this.muffinWindow = this.metaWindow.get_compositor_private(); let windowTexture = this.muffinWindow.get_texture(); let [width, height] = windowTexture.get_size(); // the 18 is 16 for the icon size + 2px min padding // this is not foolproof - the font used might be large enough to make the label bigger than the icon let scale = Math.min(1.0, WINDOW_PREVIEW_WIDTH / width, (WINDOW_PREVIEW_HEIGHT-18) / height); if (this.thumbnail) { this.thumbnailBin.set_child(null); this.thumbnail.destroy(); } this.thumbnail = new Clutter.Clone({ source: windowTexture, width: width * scale * this.scaleFactor, height: height * scale * this.scaleFactor }); this._setSize = function() { [width, height] = windowTexture.get_size(); scale = Math.min(1.0, WINDOW_PREVIEW_WIDTH / width, (WINDOW_PREVIEW_HEIGHT-18) / height); this.thumbnail.set_size(width * scale * this.scaleFactor, height * scale * this.scaleFactor); }; this._sizeChangedId = this.muffinWindow.connect('size-changed', Lang.bind(this, this._setSize)); this.thumbnailBin.set_child(this.thumbnail); let allocation = this.actor.get_allocation_box(); let previewHeight = allocation.y2 - allocation.y1; let previewWidth = allocation.x2 - allocation.x1; let monitor = Main.layoutManager.findMonitorForActor(this.item); let previewTop; if (this._applet.orientation == St.Side.BOTTOM) { previewTop = this.item.get_transformed_position()[1] - previewHeight - 5; } else if (this._applet.orientation == St.Side.TOP) { previewTop = this.item.get_transformed_position()[1] + this.item.get_transformed_size()[1] + 5; } else { previewTop = this.item.get_transformed_position()[1]; } let previewLeft; if (this._applet.orientation == St.Side.BOTTOM || this._applet.orientation == St.Side.TOP) { // centre the applet on the window list item if window list is on the top or bottom panel previewLeft = this.item.get_transformed_position()[0] + this.item.get_transformed_size()[0]/2 - previewWidth/2; } else if (this._applet.orientation == St.Side.LEFT) { previewLeft = this.item.get_transformed_position()[0] + this.item.get_transformed_size()[0] + 5; } else if (this._applet.orientation == St.Side.RIGHT) { previewLeft = this.item.get_transformed_position()[0] - previewWidth -5; } previewLeft = Math.round(previewLeft); previewLeft = Math.max(previewLeft, monitor.x); previewLeft = Math.min(previewLeft, monitor.x + monitor.width - previewWidth); previewTop = Math.round(previewTop); previewTop = Math.min(previewTop, monitor.y + monitor.height - previewHeight); this.actor.set_position(previewLeft, previewTop); this.actor.show(); this.visible = true; this._applet.cancelErodeTooltip(); this._applet._tooltipShowing = true; }, hide: function() { if (this._sizeChangedId != null) { this.muffinWindow.disconnect(this._sizeChangedId); this._sizeChangedId = null; } if (this.thumbnail) { this.thumbnailBin.set_child(null); this.thumbnail.destroy(); } if (this.actor) { this.actor.hide(); } this.visible = false; }, set_text: function(text) { this.label.set_text(text); }, _destroy: function() { if (this._sizeChangedId != null) { this.muffinWindow.disconnect(this._sizeChangedId); this.sizeChangedId = null; } if (this.thumbnail) { this.thumbnailBin.set_child(null); this.thumbnail.destroy(); } if (this.actor) { this.actor.destroy(); } this.actor = null; } }; function AppMenuButton(applet, metaWindow, alert) { this._init(applet, metaWindow, alert); } AppMenuButton.prototype = { _init: function(applet, metaWindow, alert) { this.actor = new Cinnamon.GenericContainer({ name: 'appMenu', style_class: 'window-list-item-box', reactive: true, can_focus: true, track_hover: true }); this._applet = applet; this.metaWindow = metaWindow; this.alert = alert; this.labelVisible = false; if (this._applet.orientation == St.Side.TOP) this.actor.add_style_class_name('top'); else if (this._applet.orientation == St.Side.BOTTOM) this.actor.add_style_class_name('bottom'); else if (this._applet.orientation == St.Side.LEFT) this.actor.add_style_class_name('left'); else if (this._applet.orientation == St.Side.RIGHT) this.actor.add_style_class_name('right'); this.actor._delegate = this; this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease)); this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress)); this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth)); this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); this.actor.connect('allocate', Lang.bind(this, this._allocate)); this.progressOverlay = new St.Widget({ style_class: "progress", reactive: false, important: true }); this.actor.add_actor(this.progressOverlay); this._iconBox = new Cinnamon.Slicer({ name: 'appMenuIcon' }); this._iconBox.connect('style-changed', Lang.bind(this, this._onIconBoxStyleChanged)); this._iconBox.connect('notify::allocation', Lang.bind(this, this._updateIconBoxClipAndGeometry)); this.actor.add_actor(this._iconBox); this._label = new St.Label(); this.actor.add_actor(this._label); this.updateLabelVisible(); this._iconBottomClip = 0; this._visible = true; this._updateCaptionId = this.metaWindow.connect('notify::title', Lang.bind(this, this.setDisplayTitle)); this._updateTileTypeId = this.metaWindow.connect('notify::tile-type', Lang.bind(this, this.setDisplayTitle)); this._updateIconId = this.metaWindow.connect('notify::icon', Lang.bind(this, this.setIcon)); this._progress = 0; if (this.metaWindow.progress !== undefined) { this._progress = this.metaWindow.progress; if (this._progress > 0) { this.progressOverlay.show(); } else this.progressOverlay.hide(); this._updateProgressId = this.metaWindow.connect("notify::progress", () => { if (this.metaWindow.progress != this._progress) { this._progress = this.metaWindow.progress; if (this._progress >0) { this.progressOverlay.show(); } else { this.progressOverlay.hide(); } this.actor.queue_relayout(); } }); } else { this.progressOverlay.hide(); } /* TODO: this._progressPulse = this.metaWindow.progress_pulse; */ this.onPreviewChanged(); if (!this.alert) { this._menuManager = new PopupMenu.PopupMenuManager(this); this.rightClickMenu = new AppMenuButtonRightClickMenu(this, this.metaWindow, this._applet.orientation); this._menuManager.addMenu(this.rightClickMenu); this._draggable = DND.makeDraggable(this.actor, null, this._applet.actor); this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin)); this._draggable.connect('drag-cancelled', Lang.bind(this, this._onDragCancelled)); this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd)); } this.onPanelEditModeChanged(); global.settings.connect('changed::panel-edit-mode', Lang.bind(this, this.onPanelEditModeChanged)); this._windows = this._applet._windows; this.scrollConnector = null; this.onScrollModeChanged(); this._needsAttention = false; this.setDisplayTitle(); this.onFocus(); this.setIcon(); if (this.alert) this.getAttention(); }, onPreviewChanged: function() { if (this._tooltip) this._tooltip.destroy(); if (this._applet.usePreview) this._tooltip = new WindowPreview(this, this.metaWindow, this._applet.orientation); else this._tooltip = new Tooltips.PanelItemTooltip(this, "", this._applet.orientation); this.setDisplayTitle(); }, onPanelEditModeChanged: function() { let editMode = global.settings.get_boolean("panel-edit-mode"); if (this._draggable) this._draggable.inhibit = editMode; this.actor.reactive = !editMode; }, onScrollModeChanged: function() { if (this._applet.scrollable) { this.scrollConnector = this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); } else { if (this.scrollConnector) { this.actor.disconnect(this.scrollConnector); this.scrollConnector = null; } } }, _onScrollEvent: function(actor, event) { let direction = event.get_scroll_direction(); // Find the current focused window let windows = this.actor.get_parent().get_children() .filter(function(item) { return item.visible; }).map(function(item) { return item._delegate; }); windows = windows.reverse(); let i = windows.length; while (i-- && !windows[i].metaWindow.has_focus()); if (i == -1) return; // v home-made xor if ((direction == 0) != this._applet.reverseScroll) i++; else i--; if (i == windows.length) i = 0; else if (i == -1) i = windows.length - 1; Main.activateWindow(windows[i].metaWindow, global.get_current_time()); }, _onDragBegin: function() { if (this._applet.orientation == St.Side.TOP || this._applet.orientation == St.Side.BOTTOM) { this._draggable._overrideY = this.actor.get_transformed_position()[1]; this._draggable._overrideX = null; } else { this._draggable._overrideX = this.actor.get_transformed_position()[0]; this._draggable._overrideY = null; } this._tooltip.hide(); this._tooltip.preventShow = true; }, _onDragEnd: function() { this.actor.show(); this._applet.clearDragPlaceholder(); this._tooltip.preventShow = false; }, _onDragCancelled: function() { this.actor.show(); this._applet.clearDragPlaceholder(); this._tooltip.preventShow = false; }, getDragActor: function() { let clone = new Clutter.Clone({ source: this.actor }); clone.width = this.actor.width; clone.height = this.actor.height; return clone; }, getDragActorSource: function() { return this.actor; }, handleDragOver: function(source, actor, x, y, time) { if (this._draggable && this._draggable.inhibit) { return DND.DragMotionResult.CONTINUE; } if (source instanceof AppMenuButton) return DND.DragMotionResult.CONTINUE; /* Users can drag things from one window to another window (eg drag an * image from Firefox to LibreOffice). However, if the target window is * hidden, they will drag to the AppWindowButton of the target window, * and we will open the window for them. */ this._toggleWindow(true); return DND.DragMotionResult.NO_DROP; }, acceptDrop: function(source, actor, x, y, time) { return false; }, setDisplayTitle: function() { let title = this.metaWindow.get_title(); let tracker = Cinnamon.WindowTracker.get_default(); let app = tracker.get_window_app(this.metaWindow); if (!title) title = app ? app.get_name() : '?'; /* Sanitize the window title to prevent dodgy window titles such as * "); DROP TABLE windows; --. Turn all whitespaces into " " because * newline characters are known to cause trouble. Also truncate the * title when necessary or else cogl might get unhappy and crash * Cinnamon. */ title = title.replace(/\s/g, " "); if (title.length > MAX_TEXT_LENGTH) title = title.substr(0, MAX_TEXT_LENGTH); if (this._tooltip && this._tooltip.set_text) this._tooltip.set_text(title); if (this.metaWindow.minimized) { title = "["+ title +"]"; } else if (this.metaWindow.tile_type == Meta.WindowTileType.TILED) { title = "|"+ title; } else if (this.metaWindow.tile_type == Meta.WindowTileType.SNAPPED) { title = "||"+ title; } this._label.set_text(title); }, destroy: function() { this.metaWindow.disconnect(this._updateCaptionId); this.metaWindow.disconnect(this._updateTileTypeId); this.metaWindow.disconnect(this._updateIconId); this._tooltip.destroy(); if (this.rightClickMenu) { this.rightClickMenu.destroy(); } this.actor.destroy(); }, _hasFocus: function() { if (this.metaWindow.minimized) return false; if (this.metaWindow.has_focus()) return true; let transientHasFocus = false; this.metaWindow.foreach_transient(function(transient) { if (transient.has_focus()) { transientHasFocus = true; return false; } return true; }); return transientHasFocus; }, onFocus: function() { if (this._hasFocus()) { this.actor.add_style_pseudo_class('focus'); this.actor.remove_style_class_name("window-list-item-demands-attention"); this.actor.remove_style_class_name("window-list-item-demands-attention-top"); this._needsAttention = false; if (this.alert) { this.destroy(); this._windows.splice(this._windows.indexOf(this), 1); } } else { this.actor.remove_style_pseudo_class('focus'); } }, _onButtonRelease: function(actor, event) { this._tooltip.hide(); if (this.alert) { if (event.get_button() == 1) this._toggleWindow(false); return false; } if (event.get_button() == 1) { if (this.rightClickMenu.isOpen) this.rightClickMenu.toggle(); this._toggleWindow(false); } else if (event.get_button() == 2 && this._applet.middleClickClose) { this.metaWindow.delete(global.get_current_time()); } return true; }, _onButtonPress: function(actor, event) { this._tooltip.hide(); if (!this.alert && event.get_button() == 3) { this.rightClickMenu.mouseEvent = event; this.rightClickMenu.toggle(); if (this._hasFocus()) { this.actor.add_style_pseudo_class('focus'); } } }, _toggleWindow: function(fromDrag){ if (!this._hasFocus()) { Main.activateWindow(this.metaWindow, global.get_current_time()); this.actor.add_style_pseudo_class('focus'); } else if (!fromDrag) { this.metaWindow.minimize(); this.actor.remove_style_pseudo_class('focus'); } }, _onIconBoxStyleChanged: function() { let node = this._iconBox.get_theme_node(); this._iconBottomClip = node.get_length('app-icon-bottom-clip'); this._updateIconBoxClipAndGeometry(); }, _updateIconBoxClipAndGeometry: function() { let allocation = this._iconBox.allocation; if (this._iconBottomClip > 0) this._iconBox.set_clip(0, 0, allocation.x2 - allocation.x1, allocation.y2 - allocation.y1 - this._iconBottomClip); else this._iconBox.remove_clip(); let rect = new Meta.Rectangle(); [rect.x, rect.y] = this.actor.get_transformed_position(); [rect.width, rect.height] = this.actor.get_transformed_size(); this.metaWindow.set_icon_geometry(rect); }, _getPreferredWidth: function(actor, forHeight, alloc) { let [minSize, naturalSize] = this._iconBox.get_preferred_width(forHeight); // minimum size just enough for icon if we ever get that many apps going alloc.min_size = naturalSize + 2 * 3 * global.ui_scale; if (this._applet.orientation == St.Side.TOP || this._applet.orientation == St.Side.BOTTOM ) { // the 'buttons use entire space' option only makes sense on horizontal panels if (this._applet.buttonsUseEntireSpace) { let [lminSize, lnaturalSize] = this._label.get_preferred_width(forHeight); alloc.natural_size = Math.max(150 * global.ui_scale, lnaturalSize + naturalSize + 3 * 3 * global.ui_scale); } else { alloc.natural_size = 150 * global.ui_scale; } } else { alloc.natural_size = this._applet._panelHeight; } }, _getPreferredHeight: function(actor, forWidth, alloc) { let [minSize1, naturalSize1] = this._iconBox.get_preferred_height(forWidth); if (this.labelVisible) { let [minSize2, naturalSize2] = this._label.get_preferred_height(forWidth); alloc.min_size = Math.max(minSize1, minSize2); } else { alloc.min_size = minSize1; } if (this._applet.orientation == St.Side.TOP || this._applet.orientation == St.Side.BOTTOM ) { /* putting a container around the actor for layout management reasons affects the allocation, causing the visible border to pull in close around the contents which is not the desired (pre-existing) behaviour, so need to push the visible border back towards the panel edge. Assigning the natural size to the full panel height used to cause recursion errors but seems fine now. If this happens to avoid this you can subtract 1 or 2 pixels, but this will give an unreactive strip at the edge of the screen */ alloc.natural_size = this._applet._panelHeight; } else { alloc.natural_size = naturalSize1; } }, _allocate: function(actor, box, flags) { let allocWidth = box.x2 - box.x1; let allocHeight = box.y2 - box.y1; let childBox = new Clutter.ActorBox(); let [minWidth, minHeight, naturalWidth, naturalHeight] = this._iconBox.get_preferred_size(); let direction = this.actor.get_text_direction(); let xPadding = 3 * global.ui_scale; let yPadding = Math.floor(Math.max(0, allocHeight - naturalHeight) / 2); childBox.y1 = yPadding; childBox.y2 = childBox.y1 + Math.min(naturalHeight, allocHeight); if (this.labelVisible) { if (direction == Clutter.TextDirection.LTR) { if (allocWidth < naturalWidth + xPadding * 2) childBox.x1 = Math.max(0, (allocWidth - naturalWidth) / 2); else childBox.x1 = Math.min(allocWidth, xPadding); childBox.x2 = Math.min(childBox.x1 + naturalWidth, allocWidth); } else { if (allocWidth < naturalWidth + xPadding * 2) childBox.x1 = Math.max(0, (allocWidth - naturalWidth) / 2); else childBox.x1 = allocWidth - naturalWidth - xPadding; childBox.x2 = Math.min(childBox.x1 + naturalWidth, allocWidth); } } else { if (allocWidth < naturalWidth) childBox.x1 = Math.max(0, (allocWidth - naturalWidth) / 2); else childBox.x1 = (allocWidth - naturalWidth) / 2; childBox.x2 = Math.min(childBox.x1 + naturalWidth, allocWidth); } this._iconBox.allocate(childBox, flags); if (this.labelVisible) { [minWidth, minHeight, naturalWidth, naturalHeight] = this._label.get_preferred_size(); yPadding = Math.floor(Math.max(0, allocHeight - naturalHeight) / 2); childBox.y1 = yPadding; childBox.y2 = childBox.y1 + Math.min(naturalHeight, allocHeight); if (direction == Clutter.TextDirection.LTR) { // Reuse the values from the previous allocation childBox.x1 = Math.min(childBox.x2 + xPadding, Math.max(0, allocWidth - xPadding)); childBox.x2 = Math.max(childBox.x1, allocWidth - xPadding); } else { childBox.x2 = Math.max(childBox.x1 - xPadding, 0); childBox.x1 = Math.min(childBox.x2, xPadding); } this._label.allocate(childBox, flags); } if (!this.progressOverlay.visible) { return; } childBox.x1 = 0; childBox.y1 = 0; childBox.x2 = this.actor.width; childBox.y2 = this.actor.height; this.progressOverlay.allocate(childBox, flags); let clip_width = Math.max((this.actor.width) * (this._progress / 100.0), 1.0); this.progressOverlay.set_clip(0, 0, clip_width, this.actor.height); }, updateLabelVisible: function() { if (this._applet.orientation == St.Side.TOP || this._applet.orientation == St.Side.BOTTOM) { this._label.show(); this.labelVisible = true; } else { this._label.hide(); this.labelVisible = false; } }, setIcon: function() { let tracker = Cinnamon.WindowTracker.get_default(); let app = tracker.get_window_app(this.metaWindow); if (this._applet._scaleMode && this.labelVisible) this.iconSize = Math.round(this._applet._panelHeight * ICON_HEIGHT_FACTOR / global.ui_scale); else if (!this.labelVisible) this.iconSize = Math.round(this._applet._panelHeight * VERTICAL_ICON_HEIGHT_FACTOR / global.ui_scale); else this.iconSize = HORIZONTAL_ICON_SIZE; let icon = app ? app.create_icon_texture(this.iconSize) : new St.Icon({ icon_name: 'application-default-icon', icon_type: St.IconType.FULLCOLOR, icon_size: this.iconSize }); let old_child = this._iconBox.get_child(); this._iconBox.set_child(icon); if (old_child) old_child.destroy(); }, getAttention: function() { if (this._needsAttention) return false; this._needsAttention = true; let counter = 0; this._flashButton(counter); return true; }, _flashButton: function(counter) { if (!this._needsAttention) return; this.actor.add_style_class_name("window-list-item-demands-attention"); if (counter < 4) { Mainloop.timeout_add(FLASH_INTERVAL, Lang.bind(this, function () { if (this.actor.has_style_class_name("window-list-item-demands-attention")) { this.actor.remove_style_class_name("window-list-item-demands-attention"); } Mainloop.timeout_add(FLASH_INTERVAL, Lang.bind(this, function () { this._flashButton(++counter); })); })); } } }; function AppMenuButtonRightClickMenu(launcher, metaWindow, orientation) { this._init(launcher, metaWindow, orientation); } AppMenuButtonRightClickMenu.prototype = { __proto__: Applet.AppletPopupMenu.prototype, _init: function(launcher, metaWindow, orientation) { Applet.AppletPopupMenu.prototype._init.call(this, launcher, orientation); this._launcher = launcher; this._windows = launcher._applet._windows; this.connect('open-state-changed', Lang.bind(this, this._onToggled)); this.orientation = orientation; this.metaWindow = metaWindow; }, _populateMenu: function() { let mw = this.metaWindow; let item; let length; // Move to monitor if ((length = Main.layoutManager.monitors.length) == 2) { Main.layoutManager.monitors.forEach(function (monitor, index) { if (index === mw.get_monitor()) return; item = new PopupMenu.PopupMenuItem(_("Move to the other monitor")); item.connect('activate', function() { mw.move_to_monitor(index); }); this.addMenuItem(item); }, this); } else if ((length = Main.layoutManager.monitors.length) > 2) { Main.layoutManager.monitors.forEach(function (monitor, index) { if (index === mw.get_monitor()) return; item = new PopupMenu.PopupMenuItem(_("Move to monitor %d").format(index + 1)); item.connect('activate', function() { mw.move_to_monitor(index); }); this.addMenuItem(item); }, this); } // Move to workspace if ((length = global.screen.n_workspaces) > 1) { if (mw.is_on_all_workspaces()) { item = new PopupMenu.PopupMenuItem(_("Only on this workspace")); item.connect('activate', function() { mw.unstick(); }); this.addMenuItem(item); } else { item = new PopupMenu.PopupMenuItem(_("Visible on all workspaces")); item.connect('activate', function() { mw.stick(); }); this.addMenuItem(item); item = new PopupMenu.PopupSubMenuMenuItem(_("Move to another workspace")); this.addMenuItem(item); let curr_index = mw.get_workspace().index(); for (let i = 0; i < length; i++) { // Make the index a local variable to pass to function let j = i; let name = Main.workspace_names[i] ? Main.workspace_names[i] : Main._makeDefaultWorkspaceName(i); let ws = new PopupMenu.PopupMenuItem(name); if (i == curr_index) ws.setSensitive(false); ws.connect('activate', function() { mw.change_workspace(global.screen.get_workspace_by_index(j)); }); item.menu.addMenuItem(ws); } } } // Preferences let subMenu = new PopupMenu.PopupSubMenuMenuItem(_("Preferences")); this.addMenuItem(subMenu); item = new PopupMenu.PopupIconMenuItem(_("About..."), "dialog-question", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this._launcher._applet, this._launcher._applet.openAbout)); subMenu.menu.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Configure..."), "system-run", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this._launcher._applet, this._launcher._applet.configureApplet)); subMenu.menu.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Remove 'Window list'"), "edit-delete", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { AppletManager._removeAppletFromPanel(this._launcher._applet._uuid, this._launcher._applet.instance_id); })); subMenu.menu.addMenuItem(item); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); // Close all/others item = new PopupMenu.PopupIconMenuItem(_("Close all"), "application-exit", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { for (let window of this._windows) if (window.actor.visible && !window._needsAttention) window.metaWindow.delete(global.get_current_time()); })); this.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Close others"), "window-close", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { for (let window of this._windows) if (window.actor.visible && window.metaWindow != this.metaWindow && !window._needsAttention) window.metaWindow.delete(global.get_current_time()); })); this.addMenuItem(item); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); // Miscellaneous if (mw.get_compositor_private().opacity != 255) { item = new PopupMenu.PopupMenuItem(_("Restore to full opacity")); item.connect('activate', function() { mw.get_compositor_private().set_opacity(255); }); this.addMenuItem(item); } if (mw.minimized) { item = new PopupMenu.PopupIconMenuItem(_("Restore"), "view-sort-descending", St.IconType.SYMBOLIC); item.connect('activate', function() { Main.activateWindow(mw, global.get_current_time()); }); } else { item = new PopupMenu.PopupIconMenuItem(_("Minimize"), "view-sort-ascending", St.IconType.SYMBOLIC); item.connect('activate', function() { mw.minimize(); }); } this.addMenuItem(item); if (mw.get_maximized()) { item = new PopupMenu.PopupIconMenuItem(_("Unmaximize"), "view-restore", St.IconType.SYMBOLIC); item.connect('activate', function() { mw.unmaximize(Meta.MaximizeFlags.HORIZONTAL | Meta.MaximizeFlags.VERTICAL); }); } else { item = new PopupMenu.PopupIconMenuItem(_("Maximize"), "view-fullscreen", St.IconType.SYMBOLIC); item.connect('activate', function() { mw.maximize(Meta.MaximizeFlags.HORIZONTAL | Meta.MaximizeFlags.VERTICAL); }); } this.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Close"), "edit-delete", St.IconType.SYMBOLIC); item.connect('activate', function() { mw.delete(global.get_current_time()); }); this.addMenuItem(item); }, _onToggled: function(actor, isOpening){ if (this.isOpen) this._launcher._applet._menuOpen = true; else this._launcher._applet._menuOpen = false; }, toggle: function() { if (!this.isOpen) { this.removeAll(); this._populateMenu(); } Applet.AppletPopupMenu.prototype.toggle.call(this); }, }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.Applet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.Applet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.actor.set_track_hover(false); this.actor.set_style_class_name("window-list-box"); this.orientation = orientation; this.appletEnabled = false; // // A layout manager is used to cater for vertical panels as well as horizontal // let manager; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) { manager = new Clutter.BoxLayout( { orientation: Clutter.Orientation.HORIZONTAL }); } else { manager = new Clutter.BoxLayout( { orientation: Clutter.Orientation.VERTICAL }); this.actor.add_style_class_name("vertical"); } this.manager = manager; this.manager_container = new Clutter.Actor( { layout_manager: manager } ); this.actor.add_actor (this.manager_container); this.dragInProgress = false; this._tooltipShowing = false; this._tooltipErodeTimer = null; this._menuOpen = false; this._urgentSignal = null; this._windows = []; this._monitorWatchList = []; this.settings = new Settings.AppletSettings(this, "window-list@cinnamon.org", this.instance_id); this.settings.bind("show-all-workspaces", "showAllWorkspaces"); this.settings.bind("enable-alerts", "enableAlerts", this._updateAttentionGrabber); this.settings.bind("enable-scrolling", "scrollable", this._onEnableScrollChanged); this.settings.bind("reverse-scrolling", "reverseScroll"); this.settings.bind("middle-click-close", "middleClickClose"); this.settings.bind("buttons-use-entire-space", "buttonsUseEntireSpace", this._refreshAllItems); this.settings.bind("window-preview", "usePreview", this._onPreviewChanged); this.signals = new SignalManager.SignalManager(null); let tracker = Cinnamon.WindowTracker.get_default(); this.signals.connect(tracker, "notify::focus-app", this._onFocus, this); this.signals.connect(global.screen, 'window-added', this._onWindowAdded, this); this.signals.connect(global.screen, 'window-removed', this._onWindowRemoved, this); this.signals.connect(global.screen, 'window-monitor-changed', this._onWindowMonitorChanged, this); this.signals.connect(global.screen, 'window-workspace-changed', this._onWindowWorkspaceChanged, this); this.signals.connect(global.screen, 'window-skip-taskbar-changed', this._onWindowSkipTaskbarChanged, this); this.signals.connect(global.screen, 'monitors-changed', this._updateWatchedMonitors, this); this.signals.connect(global.window_manager, 'switch-workspace', this._refreshAllItems, this); this.signals.connect(global.window_manager, 'minimize', this._onWindowStateChange, this); this.signals.connect(global.window_manager, 'maximize', this._onWindowStateChange, this); this.signals.connect(global.window_manager, 'unmaximize', this._onWindowStateChange, this); this.signals.connect(global.window_manager, 'map', this._onWindowStateChange, this); this.signals.connect(global.window_manager, 'tile', this._onWindowStateChange, this); this.actor.connect('style-changed', Lang.bind(this, this._updateSpacing)); global.settings.bind("panel-edit-mode", this.actor, "reactive", Gio.SettingsBindFlags.DEFAULT); this.on_orientation_changed(orientation); this._updateAttentionGrabber(); }, on_applet_added_to_panel: function(userEnabled) { this._updateSpacing(); this.appletEnabled = true; }, on_applet_removed_from_panel: function() { this.signals.disconnectAllSignals(); }, on_applet_instances_changed: function() { this._updateWatchedMonitors(); }, on_panel_height_changed: function() { this._refreshAllItems(); }, on_orientation_changed: function(orientation) { this.orientation = orientation; for (let window of this._windows) window.updateLabelVisible(); if (orientation == St.Side.TOP || orientation == St.Side.BOTTOM) { this.manager.set_vertical(false); this._reTitleItems(); this.actor.remove_style_class_name("vertical"); } else { this.manager.set_vertical(true); this.actor.add_style_class_name("vertical"); this.actor.set_x_align(Clutter.ActorAlign.CENTER); this.actor.set_important(true); } // Any padding/margin is removed on one side so that the AppMenuButton // boxes butt up against the edge of the screen if (orientation == St.Side.TOP) { for (let child of this.manager_container.get_children()) { child.set_style_class_name('window-list-item-box top'); child.set_style('margin-top: 0px; padding-top: 0px;'); } this.actor.set_style('margin-top: 0px; padding-top: 0px;'); } else if (orientation == St.Side.BOTTOM) { for (let child of this.manager_container.get_children()) { child.set_style_class_name('window-list-item-box bottom'); child.set_style('margin-bottom: 0px; padding-bottom: 0px;'); } this.actor.set_style('margin-bottom: 0px; padding-bottom: 0px;'); } else if (orientation == St.Side.LEFT) { for (let child of this.manager_container.get_children()) { child.set_style_class_name('window-list-item-box left'); child.set_style('margin-left 0px; padding-left: 0px; padding-right: 0px; margin-right: 0px;'); child.set_x_align(Clutter.ActorAlign.CENTER); } this.actor.set_style('margin-left: 0px; padding-left: 0px; padding-right: 0px; margin-right: 0px;'); } else if (orientation == St.Side.RIGHT) { for (let child of this.manager_container.get_children()) { child.set_style_class_name('window-list-item-box right'); child.set_style('margin-left: 0px; padding-left: 0px; padding-right: 0px; margin-right: 0px;'); child.set_x_align(Clutter.ActorAlign.CENTER); } this.actor.set_style('margin-right: 0px; padding-right: 0px; padding-left: 0px; margin-left: 0px;'); } if (this.appletEnabled) { this._updateSpacing(); } }, _updateSpacing: function() { let themeNode = this.actor.get_theme_node(); let spacing = themeNode.get_length('spacing'); this.manager.set_spacing(spacing * global.ui_scale); }, _onWindowAdded: function(screen, metaWindow, monitor) { if (this._shouldAdd(metaWindow)) this._addWindow(metaWindow, false); }, _onWindowRemoved: function(screen, metaWindow) { this._removeWindow(metaWindow); }, _onWindowMonitorChanged: function(screen, metaWindow, monitor) { if (this._shouldAdd(metaWindow)) this._addWindow(metaWindow, false); else this._removeWindow(metaWindow); }, _onWindowWorkspaceChanged: function(screen, metaWindow, metaWorkspace) { let window = this._windows.find(win => (win.metaWindow == metaWindow)); if (window) this._refreshItem(window); }, _onWindowSkipTaskbarChanged: function(screen, metaWindow) { let window = this._windows.find(win => (win.metaWindow == metaWindow)); if (window && !Main.isInteresting(metaWindow)) { this._removeWindow(metaWindow); return; } this._onWindowAdded(screen, metaWindow, 0); }, _updateAttentionGrabber: function() { if (this.enableAlerts) { this.signals.connect(global.display, "window-marked-urgent", this._onWindowDemandsAttention, this); this.signals.connect(global.display, "window-demands-attention", this._onWindowDemandsAttention, this); } else { this.signals.disconnect("window-marked-urgent"); this.signals.disconnect("window-demands-attention"); } }, _onEnableScrollChanged: function() { for (let window of this._windows) window.onScrollModeChanged(); }, _onPreviewChanged: function() { for (let window of this._windows) window.onPreviewChanged(); }, _onWindowDemandsAttention : function(display, window) { // Magic to look for AppMenuButton owning window let i = this._windows.length; while (i-- && this._windows[i].metaWindow != window); // Window is not in our list if (i == -1) return; // Asks AppMenuButton to flash. Returns false if already flashing if (!this._windows[i].getAttention()) return; if (window.get_workspace() != global.screen.get_active_workspace()) this._addWindow(window, true); }, _onFocus: function() { for (let window of this._windows) window.onFocus(); }, _refreshItem: function(window) { window.actor.visible = (window.metaWindow.get_workspace() == global.screen.get_active_workspace()) || window.metaWindow.is_on_all_workspaces() || this.showAllWorkspaces; /* The above calculates the visibility if it were the normal * AppMenuButton. If this is actually a temporary AppMenuButton for * urgent windows on other workspaces, it is shown iff the normal * one isn't shown! */ if (window.alert) window.actor.visible = !window.actor.visible; }, _refreshAllItems: function() { for (let window of this._windows) { this._refreshItem(window); } this._onFocus(); }, _reTitleItems: function() { for (let window of this._windows) { window.setDisplayTitle(); } }, _onWindowStateChange: function(cinnamonwm, actor) { for (let window of this._windows) if (window.metaWindow == actor.metaWindow) window.setDisplayTitle(); }, // Used by windowManager for traditional minimize and map effect getOriginFromWindow: function(metaWindow) { for (let window of this._windows) if (window.metaWindow == metaWindow) return window.actor; return false; }, _updateWatchedMonitors: function() { let n_mons = Gdk.Screen.get_default().get_n_monitors(); let on_primary = this.panel.monitorIndex == Main.layoutManager.primaryIndex; let instances = Main.AppletManager.getRunningInstancesForUuid(this._uuid); /* Simple cases */ if (n_mons == 1) { this._monitorWatchList = [Main.layoutManager.primaryIndex]; } else if (instances.length > 1 && !on_primary) { this._monitorWatchList = [this.panel.monitorIndex]; } else { /* This is an instance on the primary monitor - it will be * responsible for any monitors not covered individually. First * convert the instances list into a list of the monitor indices, * and then add the monitors not present to the monitor watch list * */ this._monitorWatchList = [this.panel.monitorIndex]; instances = instances.map(function(x) { return x.panel.monitorIndex; }); for (let i = 0; i < n_mons; i++) if (instances.indexOf(i) == -1) this._monitorWatchList.push(i); } // Now track the windows in our favorite monitors let windows = global.display.list_windows(0); if (this.showAllWorkspaces) { for (let wks=0; wks this.manager_container.width; this._dragPlaceholderPos = -1 for (let i = children.length - 1; i >= 0; i--) { if (!children[i].visible) continue; if (isVertical) { if (y > children[i].get_allocation_box().y1) { this._dragPlaceholderPos = i; break; } } else if (x > children[i].get_allocation_box().x1) { this._dragPlaceholderPos = i; break; } } source.actor.hide(); if (this._dragPlaceholder == undefined) { this._dragPlaceholder = new DND.GenericDragPlaceholderItem(); this._dragPlaceholder.child.set_width (source.actor.width); this._dragPlaceholder.child.set_height (source.actor.height); this.manager_container.insert_child_at_index(this._dragPlaceholder.actor, this._dragPlaceholderPos); } else { this.manager_container.set_child_at_index(this._dragPlaceholder.actor, this._dragPlaceholderPos); } return DND.DragMotionResult.MOVE_DROP; }, acceptDrop: function(source, actor, x, y, time) { if (!(source instanceof AppMenuButton)) return false; if (this._dragPlaceholderPos == undefined) return false; this.manager_container.set_child_at_index(source.actor, this._dragPlaceholderPos); return true; }, clearDragPlaceholder: function() { if (this._dragPlaceholder) { this._dragPlaceholder.actor.destroy(); this._dragPlaceholder = undefined; this._dragPlaceholderPos = undefined; } }, erodeTooltip: function() { if (this._tooltipErodeTimer) { Mainloop.source_remove(this._tooltipErodeTimer); this._tooltipErodeTimer = null; } this._tooltipErodeTimer = Mainloop.timeout_add(300, Lang.bind(this, function() { this._tooltipShowing = false; this._tooltipErodeTimer = null; return false; })); }, cancelErodeTooltip: function() { if (this._tooltipErodeTimer) { Mainloop.source_remove(this._tooltipErodeTimer); this._tooltipErodeTimer = null; } } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/panel-launchers@cinnamon.org/0000775000175000017500000000000013215735076026207 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/panel-launchers@cinnamon.org/settings-schema.json0000664000175000017500000000055113215735076032201 0ustar fabiofabio{ "section1": { "type": "section", "description": "Behavior" }, "launcherList": { "type": "generic", "default": ["firefox.desktop", "gnome-terminal.desktop", "nemo.desktop"] }, "allow-dragging": { "type": "switch", "default": true, "description": "Allow dragging of launchers" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/panel-launchers@cinnamon.org/metadata.json0000664000175000017500000000032213215735076030657 0ustar fabiofabio{ "uuid": "panel-launchers@cinnamon.org", "name": "Panel launchers", "description": "Launch applications from the panel", "icon": "cinnamon-panel-launcher", "role": "panellauncher", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/panel-launchers@cinnamon.org/applet.js0000664000175000017500000005712413215735076030043 0ustar fabiofabioconst Applet = imports.ui.applet; const AppletManager = imports.ui.appletManager; const St = imports.gi.St; const Cinnamon = imports.gi.Cinnamon; const Lang = imports.lang; const Gio = imports.gi.Gio; const PopupMenu = imports.ui.popupMenu; const GLib = imports.gi.GLib; const Tooltips = imports.ui.tooltips; const DND = imports.ui.dnd; const Tweener = imports.ui.tweener; const Util = imports.misc.util; const Settings = imports.ui.settings; const Signals = imports.signals; const DEFAULT_ICON_SIZE = 20; const ICON_HEIGHT_FACTOR = 0.8; const PANEL_EDIT_MODE_KEY = 'panel-edit-mode'; const PANEL_LAUNCHERS_KEY = 'panel-launchers'; const CUSTOM_LAUNCHERS_PATH = GLib.get_home_dir() + '/.cinnamon/panel-launchers'; let pressLauncher = null; function PanelAppLauncherMenu(launcher, orientation) { this._init(launcher, orientation); } PanelAppLauncherMenu.prototype = { __proto__: Applet.AppletPopupMenu.prototype, _init: function(launcher, orientation) { this._launcher = launcher; Applet.AppletPopupMenu.prototype._init.call(this, launcher, orientation); let appinfo = this._launcher.getAppInfo(); this._actions = appinfo.list_actions(); if (this._actions.length > 0) { for (let i = 0; i < this._actions.length; i++) { let actionName = this._actions[i]; this.addAction(appinfo.get_action_name(actionName), Lang.bind(this, this._launchAction, actionName)); } this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); } let item = new PopupMenu.PopupIconMenuItem(_("Launch"), "media-playback-start", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, this._onLaunchActivate)); this.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Add"), "list-add", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, this._onAddActivate)); this.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Edit"), "document-properties", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, this._onEditActivate)); this.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Remove"), "window-close", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, this._onRemoveActivate)); this.addMenuItem(item); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); let subMenu = new PopupMenu.PopupSubMenuMenuItem(_("Preferences")); this.addMenuItem(subMenu); item = new PopupMenu.PopupIconMenuItem(_("About..."), "dialog-question", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this._launcher._applet, this._launcher._applet.openAbout)); subMenu.menu.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Configure..."), "system-run", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this._launcher._applet, this._launcher._applet.configureApplet)); subMenu.menu.addMenuItem(item); item = new PopupMenu.PopupIconMenuItem(_("Remove '%s'").format(_("Panel launchers")), "edit-delete", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { AppletManager._removeAppletFromPanel(this._launcher._applet._uuid, this._launcher._applet.instance_id); })); subMenu.menu.addMenuItem(item); }, _onLaunchActivate: function(item, event) { this._launcher.launch(); }, _onRemoveActivate: function(item, event) { this.close(); this._launcher.launchersBox.removeLauncher(this._launcher, this._launcher.isCustom()); this._launcher.actor.destroy(); }, _onAddActivate: function(item, event) { this._launcher.launchersBox.showAddLauncherDialog(event.get_time()); }, _onEditActivate: function(item, event) { this._launcher.launchersBox.showAddLauncherDialog(event.get_time(), this._launcher); }, _launchAction: function(event, name) { this._launcher.launchAction(name); } }; function PanelAppLauncher(launchersBox, app, appinfo, orientation, panel_height, scale) { this._init(launchersBox, app, appinfo, orientation, panel_height, scale); } PanelAppLauncher.prototype = { __proto__: DND.LauncherDraggable.prototype, _init: function(launchersBox, app, appinfo, orientation, panel_height, scale) { DND.LauncherDraggable.prototype._init.call(this); this.app = app; this.appinfo = appinfo; this.launchersBox = launchersBox; this._applet = launchersBox; this.orientation = orientation; this.actor = new St.Bin({ style_class: 'launcher', important: true, reactive: true, can_focus: true, x_fill: true, y_fill: true, track_hover: true }); this.actor._delegate = this; this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease)); this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress)); this._iconBox = new St.Bin({ style_class: 'icon-box', important: true }); this._iconBox.connect('style-changed', Lang.bind(this, this._onIconBoxStyleChanged)); this._iconBox.connect('notify::allocation', Lang.bind(this, this._updateIconBoxClip)); this.actor.add_actor(this._iconBox); this._iconBottomClip = 0; if (scale) { this.icon_height = Math.floor((panel_height * ICON_HEIGHT_FACTOR) / global.ui_scale); } else { this.icon_height = DEFAULT_ICON_SIZE; } this.icon = this._getIconActor(); this._iconBox.set_child(this.icon); this._menuManager = new PopupMenu.PopupMenuManager(this); this._menu = new PanelAppLauncherMenu(this, orientation); this._menuManager.addMenu(this._menu); let tooltipText = this.isCustom() ? appinfo.get_name() : app.get_name(); this._tooltip = new Tooltips.PanelItemTooltip(this, tooltipText, orientation); this._dragging = false; this._draggable = DND.makeDraggable(this.actor); this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin)); this._draggable.connect('drag-cancelled', Lang.bind(this, this._onDragCancelled)); this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd)); this._updateInhibit(); this.launchersBox.connect("launcher-draggable-setting-changed", Lang.bind(this, this._updateInhibit)); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._updateInhibit)); }, _onDragBegin: function() { this._dragging = true; this._tooltip.hide(); this._tooltip.preventShow = true; }, _onDragEnd: function() { this._dragging = false; this._tooltip.preventShow = false; this._applet._clearDragPlaceholder(); }, _onDragCancelled: function() { this._dragging = false; this._tooltip.preventShow = false; }, _updateInhibit: function(){ let editMode = global.settings.get_boolean(PANEL_EDIT_MODE_KEY); this._draggable.inhibit = !this.launchersBox.allowDragging || editMode; this.actor.reactive = !editMode; }, getDragActor: function() { return this._getIconActor(); }, // Returns the original actor that should align with the actor // we show as the item is being dragged. getDragActorSource: function() { return this.icon; }, _getIconActor: function() { if (this.isCustom()) { let icon = this.appinfo.get_icon(); if (icon == null) icon = new Gio.ThemedIcon({name: "gnome-panel-launcher"}); return new St.Icon({gicon: icon, icon_size: this.icon_height, icon_type: St.IconType.FULLCOLOR}); } else { return this.app.create_icon_texture(this.icon_height); } }, _animateIcon: function(step) { if (step >= 3) return; this.icon.set_pivot_point(0.5, 0.5); Tweener.addTween(this.icon, { scale_x: 0.7, scale_y: 0.7, time: 0.2, transition: 'easeOutQuad', onComplete: function() { Tweener.addTween(this.icon, { scale_x: 1.0, scale_y: 1.0, time: 0.2, transition: 'easeOutQuad', onComplete: function() { this._animateIcon(step + 1); }, onCompleteScope: this }); }, onCompleteScope: this }); }, launch: function() { let allocation = this._iconBox.get_allocation_box(); this._iconBox.width = allocation.x2 - allocation.x1; this._iconBox.height = allocation.y2 - allocation.y1; this._animateIcon(0); if (this.isCustom()) this.appinfo.launch([], null); else this.app.open_new_window(-1); }, launchAction: function(name) { let allocation = this._iconBox.get_allocation_box(); this._iconBox.width = allocation.x2 - allocation.x1; this._iconBox.height = allocation.y2 - allocation.y1; this._animateIcon(0); this.getAppInfo().launch_action(name, null); }, getId: function() { if (this.isCustom()) return Gio.file_new_for_path(this.appinfo.get_filename()).get_basename(); else return this.app.get_id(); }, isCustom: function() { return (this.app==null); }, _onButtonPress: function(actor, event) { pressLauncher = this.getAppname(); if (event.get_button() == 3) this._menu.toggle(); }, _onButtonRelease: function(actor, event) { if (pressLauncher == this.getAppname()){ let button = event.get_button(); if (button==1) { if (this._menu.isOpen) this._menu.toggle(); else this.launch(); } } }, _onIconBoxStyleChanged: function() { let node = this._iconBox.get_theme_node(); this._iconBottomClip = node.get_length('panel-launcher-bottom-clip'); this._updateIconBoxClip(); }, _updateIconBoxClip: function() { let allocation = this._iconBox.allocation; if (this._iconBottomClip > 0) this._iconBox.set_clip(0, 0, allocation.x2 - allocation.x1, allocation.y2 - allocation.y1 - this._iconBottomClip); else this._iconBox.remove_clip(); }, getAppInfo: function() { return (this.isCustom() ? this.appinfo : this.app.get_app_info()); }, getCommand: function() { return this.getAppInfo().get_commandline(); }, getAppname: function() { return this.getAppInfo().get_name(); }, getIcon: function() { let icon = this.getAppInfo().get_icon(); if (icon) { if (icon instanceof Gio.FileIcon) { return icon.get_file().get_path(); } else { return icon.get_names().toString(); } } return null; } }; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.Applet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.Applet.prototype._init.call(this, orientation, panel_height, instance_id); this.actor.set_track_hover(false); this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.orientation = orientation; this._dragPlaceholder = null; this._dragPlaceholderPos = -1; this._animatingPlaceholdersCount = 0; this.myactor = new St.BoxLayout({ style_class: 'panel-launchers', important: true }); this.settings = new Settings.AppletSettings(this, metadata.uuid, instance_id); this.settings.bind("launcherList", "launcherList", this._onSettingsChanged); this.settings.bind("allow-dragging", "allowDragging", this._updateLauncherDrag); this.uuid = metadata.uuid; this._settings_proxy = []; this._launchers = []; this.actor.add(this.myactor); this.actor.reactive = global.settings.get_boolean(PANEL_EDIT_MODE_KEY); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._onPanelEditModeChanged)); this.do_gsettings_import(); this.on_orientation_changed(orientation); }, _updateLauncherDrag: function() { this.emit("launcher-draggable-setting-changed"); }, do_gsettings_import: function() { let old_launchers = global.settings.get_strv(PANEL_LAUNCHERS_KEY); if (old_launchers.length >= 1 && old_launchers[0] != "DEPRECATED") { this.launcherList = old_launchers; } global.settings.set_strv(PANEL_LAUNCHERS_KEY, ["DEPRECATED"]); }, _onPanelEditModeChanged: function() { this.actor.reactive = global.settings.get_boolean(PANEL_EDIT_MODE_KEY); }, _onSettingsChanged: function() { this.reload(); }, sync_settings_proxy_to_settings: function() { this.launcherList = this._settings_proxy.map(x => x.file); }, _remove_launcher_from_proxy: function(visible_index) { let j = -1; for (let i = 0; i < this._settings_proxy.length; i++) { if (this._settings_proxy[i].valid) { j++; if (j == visible_index) { this._settings_proxy.splice(i, 1); break; } } } }, _move_launcher_in_proxy: function(launcher, new_index) { let proxy_member; for (let i = 0; i < this._settings_proxy.length; i++) { if (this._settings_proxy[i].launcher == launcher) { proxy_member = this._settings_proxy.splice(i, 1)[0]; break; } } if (!proxy_member) return; let j = -1; for (let i = 0; i < this._settings_proxy.length; i++) { if (this._settings_proxy[i].valid) { j++; if (j == new_index) { this._settings_proxy.splice(i, 0, proxy_member); return; } } } if (new_index == j + 1) this._settings_proxy.push(proxy_member); }, loadSingleApp: function(path) { let appSys = Cinnamon.AppSystem.get_default(); let app = appSys.lookup_app(path); let appinfo = null; if (!app) appinfo = Gio.DesktopAppInfo.new_from_filename(CUSTOM_LAUNCHERS_PATH+"/"+path); return [app, appinfo]; }, on_panel_height_changed: function() { this.reload(); }, on_orientation_changed: function(neworientation) { this.orientation = neworientation; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) { this.myactor.remove_style_class_name('vertical'); this.myactor.set_vertical(false); this.myactor.set_x_expand(false); this.myactor.set_y_expand(true); } else { this.myactor.add_style_class_name('vertical'); this.myactor.set_vertical(true); this.myactor.set_x_expand(true); this.myactor.set_y_expand(false); } this.reload(); }, reload: function() { this.myactor.destroy_all_children(); this._launchers = []; this._settings_proxy = []; for (let file of this.launcherList) { let [app, appinfo] = this.loadSingleApp(file); if (app || appinfo) { let launcher = new PanelAppLauncher(this, app, appinfo, this.orientation, this._panelHeight, this._scaleMode); this.myactor.add(launcher.actor); this._launchers.push(launcher); this._settings_proxy.push({ file: file, valid: true, launcher: launcher }); } else { this._settings_proxy.push({ file: file, valid: false }); } } }, removeLauncher: function(launcher, delete_file) { let i = this._launchers.indexOf(launcher); if (i >= 0) { launcher.actor.destroy(); this._launchers.splice(i, 1); this._remove_launcher_from_proxy(i); } if (delete_file) { let appid = launcher.getId(); let file = Gio.file_new_for_path(CUSTOM_LAUNCHERS_PATH+"/"+appid); if (file.query_exists(null)) file.delete(null); } this.sync_settings_proxy_to_settings(); }, getDummyLauncher: function(path) { let [app, appinfo] = this.loadSingleApp(path); let dummy; if (app || appinfo) { dummy = new PanelAppLauncher(this, app, appinfo, this.orientation, this._panelHeight); } if (dummy && dummy.actor) return dummy.actor; else return null; }, acceptNewLauncher: function(path) { this.myactor.add(this.getDummyLauncher(path)); let launchers = this.launcherList; launchers.push(path); this.launcherList = launchers; this.reload(); }, addForeignLauncher: function(path, position, source) { this.myactor.insert_child_at_index(this.getDummyLauncher(path), position); this._settings_proxy.splice(position, 0, { file: path, valid: true }); this.sync_settings_proxy_to_settings(); }, moveLauncher: function(launcher, pos) { let origpos = this._launchers.indexOf(launcher); if (origpos >= 0) { launcher.actor.destroy(); this.myactor.insert_child_at_index(this.getDummyLauncher(launcher.getId()), pos); this._launchers.splice(origpos, 1); this._move_launcher_in_proxy(launcher, pos); this.sync_settings_proxy_to_settings(); this.reload(); // overkill really, but a way of getting the scaled size right } }, showAddLauncherDialog: function(timestamp, launcher){ if (launcher) { Util.spawnCommandLine("cinnamon-desktop-editor -mcinnamon-launcher -f" + launcher.getId() + " " + this.settings.file.get_path()); } else { Util.spawnCommandLine("cinnamon-desktop-editor -mcinnamon-launcher " + this.settings.file.get_path()); } }, _clearDragPlaceholder: function() { if (this._dragPlaceholder) { this._dragPlaceholder.animateOutAndDestroy(); this._dragPlaceholder = null; this._dragPlaceholderPos = -1; } }, handleDragOver: function(source, actor, x, y, time) { if (!(source.isDraggableApp || (source instanceof DND.LauncherDraggable))) return DND.DragMotionResult.NO_DROP; let children = this.myactor.get_children(); let numChildren = children.length; let boxWidth; let vertical = false; if (this.myactor.height > this.myactor.width) { // assume oriented vertically vertical = true; boxWidth = this.myactor.height; if (this._dragPlaceholder) { boxWidth -= this._dragPlaceholder.actor.height; numChildren--; } } else { boxWidth = this.myactor.width; if (this._dragPlaceholder) { boxWidth -= this._dragPlaceholder.actor.width; numChildren--; } } let launcherPos = this._launchers.indexOf(source); let pos; if (vertical) pos = Math.round(y * numChildren / boxWidth); else pos = Math.round(x * numChildren / boxWidth); if (pos != this._dragPlaceholderPos && pos <= numChildren) { if (this._animatingPlaceholdersCount > 0) { let launchersChildren = children.filter(function(actor) { return actor._delegate instanceof DND.LauncherDraggable; }); this._dragPlaceholderPos = children.indexOf(launchersChildren[pos]); } else { this._dragPlaceholderPos = pos; } // Don't allow positioning before or after self if (launcherPos != -1 && pos == launcherPos) { if (this._dragPlaceholder) { this._dragPlaceholder.animateOutAndDestroy(); this._animatingPlaceholdersCount++; this._dragPlaceholder.actor.connect('destroy', Lang.bind(this, function() { this._animatingPlaceholdersCount--; })); } this._dragPlaceholder = null; return DND.DragMotionResult.CONTINUE; } // If the placeholder already exists, we just move // it, but if we are adding it, expand its size in // an animation let fadeIn; if (this._dragPlaceholder) { this._dragPlaceholder.actor.destroy(); fadeIn = false; } else { fadeIn = true; } this._dragPlaceholder = new DND.GenericDragPlaceholderItem(); this._dragPlaceholder.child.set_width (20); this._dragPlaceholder.child.set_height (10); this.myactor.insert_child_at_index(this._dragPlaceholder.actor, this._dragPlaceholderPos); if (fadeIn) this._dragPlaceholder.animateIn(); } if (source instanceof DND.LauncherDraggable && source.launchersBox == this) return DND.DragMotionResult.MOVE_DROP; return DND.DragMotionResult.COPY_DROP; }, acceptDrop: function(source, actor, x, y, time) { if (!(source.isDraggableApp || (source instanceof DND.LauncherDraggable))) return DND.DragMotionResult.NO_DROP; let sourceId; if (source instanceof DND.LauncherDraggable) sourceId = source.getId(); else sourceId = source.get_app_id(); let launcherPos = 0; let children = this.myactor.get_children(); for (let i = 0; i < this._dragPlaceholderPos; i++) { if (this._dragPlaceholder && children[i] == this._dragPlaceholder.actor) continue; if (source === children[i]._delegate) continue; launcherPos++; } if (source instanceof DND.LauncherDraggable && source.launchersBox == this) this.moveLauncher(source, launcherPos); else { if (source instanceof DND.LauncherDraggable) source.launchersBox.removeLauncher(source, false); this.addForeignLauncher(sourceId, launcherPos, source); } actor.destroy(); return true; } }; Signals.addSignalMethods(MyApplet.prototype); function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/power@cinnamon.org/0000775000175000017500000000000013215735076024262 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/power@cinnamon.org/settings-schema.json0000664000175000017500000000053213215735076030253 0ustar fabiofabio{ "labelinfo": { "type": "combobox", "description": "Display", "default": "nothing", "options" : { "Show percentage": "percentage", "Show time remaining": "time", "Show percentage and time remaining": "percentage_time", "Hide label": "nothing" } } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/power@cinnamon.org/metadata.json0000664000175000017500000000022213215735076026731 0ustar fabiofabio{ "uuid": "power@cinnamon.org", "name": "Power Manager", "description": "Cinnamon power management applet", "icon": "battery-full-charging" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js0000664000175000017500000005167213215735076026120 0ustar fabiofabioconst Applet = imports.ui.applet; const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const Interfaces = imports.misc.interfaces const Lang = imports.lang; const St = imports.gi.St; const Tooltips = imports.ui.tooltips; const PopupMenu = imports.ui.popupMenu; const Pango = imports.gi.Pango; const Main = imports.ui.main; const Settings = imports.ui.settings; const GnomeSession = imports.misc.gnomeSession; const BrightnessBusName = "org.cinnamon.SettingsDaemon.Power.Screen"; const KeyboardBusName = "org.cinnamon.SettingsDaemon.Power.Keyboard"; const PANEL_EDIT_MODE_KEY = "panel-edit-mode"; const UPDeviceType = { UNKNOWN: 0, AC_POWER: 1, BATTERY: 2, UPS: 3, MONITOR: 4, MOUSE: 5, KEYBOARD: 6, PDA: 7, PHONE: 8, MEDIA_PLAYER: 9, TABLET: 10, COMPUTER: 11 }; const UPDeviceState = { UNKNOWN: 0, CHARGING: 1, DISCHARGING: 2, EMPTY: 3, FULLY_CHARGED: 4, PENDING_CHARGE: 5, PENDING_DISCHARGE: 6 }; function deviceTypeToString(type) { switch (type) { case UPDeviceType.AC_POWER: return _("AC adapter"); case UPDeviceType.BATTERY: return _("Laptop battery"); case UPDeviceType.UPS: return _("UPS"); case UPDeviceType.MONITOR: return _("Monitor"); case UPDeviceType.MOUSE: return _("Mouse"); case UPDeviceType.KEYBOARD: return _("Keyboard"); case UPDeviceType.PDA: return _("PDA"); case UPDeviceType.PHONE: return _("Cell phone"); case UPDeviceType.MEDIA_PLAYER: return _("Media player"); case UPDeviceType.TABLET: return _("Tablet"); case UPDeviceType.COMPUTER: return _("Computer"); default: return _("Unknown"); } } function deviceToIcon(type, icon) { switch (type) { case UPDeviceType.MONITOR: return ("video-display"); case UPDeviceType.MOUSE: return ("input-mouse"); case UPDeviceType.KEYBOARD: return ("input-keyboard"); case UPDeviceType.PHONE: case UPDeviceType.MEDIA_PLAYER: return ("phone-apple-iphone"); case UPDeviceType.TABLET: return ("input-tablet"); case UPDeviceType.COMPUTER: return ("computer"); default: if (icon) { return icon; } else { return ("battery-full"); } } } function DeviceItem() { this._init.apply(this, arguments); } DeviceItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(device, status, aliases) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, { reactive: false }); let [device_id, vendor, model, device_type, icon, percentage, state, time, timepercentage] = device; this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' }); this._vbox = new St.BoxLayout({ style_class: 'popup-device-menu-item', vertical: true}); let description = deviceTypeToString(device_type); if (vendor != "" || model != "") { description = "%s %s".format(vendor, model); } for ( let i = 0; i < aliases.length; ++i ) { let alias = aliases[i]; try{ let parts = alias.split(':='); if (parts[0] == device_id) { description = parts[1]; } } catch(e) { // ignore malformed aliases global.logError(alias); } } this.label = new St.Label({ text: "%s %d%%".format(description, Math.round(percentage)) }); let statusLabel = new St.Label({ text: "%s".format(status), style_class: 'popup-inactive-menu-item' }); let device_icon = deviceToIcon(device_type, icon); if (device_icon == icon) { this._icon = new St.Icon({ gicon: Gio.icon_new_for_string(icon), icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon' }); } else { this._icon = new St.Icon({icon_name: device_icon, icon_type: St.IconType.SYMBOLIC, icon_size: 16}); } this._box.add_actor(this._icon); this._box.add_actor(this.label); this._vbox.add_actor(this._box); this._vbox.add_actor(statusLabel); this.addActor(this._vbox); } } function BrightnessSlider(applet, label, icon, busName, minimum_value){ this._init(applet, label, icon, busName, minimum_value); } BrightnessSlider.prototype = { __proto__: PopupMenu.PopupSliderMenuItem.prototype, _init: function(applet, label, icon, busName, minimum_value){ PopupMenu.PopupSliderMenuItem.prototype._init.call(this, 0); this.actor.hide(); this._applet = applet; this._seeking = false; this._minimum_value = minimum_value; this.connect("drag-begin", Lang.bind(this, function(){ this._seeking = true; })); this.connect("drag-end", Lang.bind(this, function(){ this._seeking = false; })); this.icon = new St.Icon({icon_name: icon, icon_type: St.IconType.SYMBOLIC, icon_size: 16}); this.removeActor(this._slider); this.addActor(this.icon, {span: 0}); this.addActor(this._slider, {span: -1, expand: true}); this.label = label; this.tooltipText = label; this.tooltip = new Tooltips.Tooltip(this.actor, this.tooltipText); Interfaces.getDBusProxyAsync(busName, Lang.bind(this, function(proxy, error) { this._proxy = proxy; this._proxy.GetPercentageRemote(Lang.bind(this, this._dbusAcquired)); })); }, _dbusAcquired: function(b, error){ if(error) return; this._updateBrightnessLabel(b); this.setValue(b / 100); this.connect("value-changed", Lang.bind(this, this._sliderChanged)); this.actor.show(); //get notified this._proxy.connectSignal('Changed', Lang.bind(this, this._getBrightness)); this._applet.menu.connect("open-state-changed", Lang.bind(this, this._getBrightnessForcedUpdate)); }, _sliderChanged: function(slider, value) { if (value < this._minimum_value) { value = this._minimum_value; } this._setBrightness(Math.round(value * 100)); }, _getBrightness: function() { //This func is called when dbus signal is received. //Only update items value when slider is not used if (!this._seeking) this._getBrightnessForcedUpdate(); }, _getBrightnessForcedUpdate: function() { this._proxy.GetPercentageRemote(Lang.bind(this, function(b) { this._updateBrightnessLabel(b); this.setValue(b / 100); })); }, _setBrightness: function(value) { this._proxy.SetPercentageRemote(value, Lang.bind(this, function(b) { this._updateBrightnessLabel(b); })); }, _updateBrightnessLabel: function(value) { this.tooltipText = this.label; if(value) this.tooltipText += ": " + value + "%"; this.tooltip.set_text(this.tooltipText); } }; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.metadata = metadata; this.settings = new Settings.AppletSettings(this, metadata.uuid, instanceId); Main.systrayManager.registerRole("power", metadata.uuid); Main.systrayManager.registerRole("battery", metadata.uuid); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.aliases = global.settings.get_strv("device-aliases"); this._deviceItems = [ ]; this._devices = [ ]; this._primaryDeviceId = null; this.panel_icon_name = ''; // remember the panel icon name (so we only set it when it actually changes) this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.brightness = new BrightnessSlider(this, _("Brightness"), "display-brightness", BrightnessBusName, 0.01); this.keyboard = new BrightnessSlider(this, _("Keyboard backlight"), "keyboard-brightness", KeyboardBusName, 0); this.menu.addMenuItem(this.brightness); this.menu.addMenuItem(this.keyboard); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addSettingsAction(_("Power Settings"), 'power'); this.actor.connect("scroll-event", Lang.bind(this, this._onScrollEvent)); this._proxy = null; global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._onPanelEditModeChanged)); Interfaces.getDBusProxyAsync("org.cinnamon.SettingsDaemon.Power", Lang.bind(this, function(proxy, error) { this._proxy = proxy; this._proxy.connect("g-properties-changed", Lang.bind(this, this._devicesChanged)); global.settings.connect('changed::device-aliases', Lang.bind(this, this._on_device_aliases_changed)); this.settings.bind("labelinfo", "labelinfo", this._devicesChanged); this._devicesChanged(); })); this.set_show_label_in_vertical_panels(false); }, _onPanelEditModeChanged: function() { if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { if (!this.actor.visible) { this.set_applet_icon_symbolic_name("battery-missing"); this.set_applet_enabled(true); } } else { this._devicesChanged(); } }, _on_device_aliases_changed: function() { this.aliases = global.settings.get_strv("device-aliases"); this._devicesChanged(); }, _onButtonPressEvent: function(actor, event){ //toggle keyboard brightness on middle click if(event.get_button() === 2){ this.keyboard._proxy.ToggleRemote(function(){}); } return Applet.Applet.prototype._onButtonPressEvent.call(this, actor, event); }, on_applet_clicked: function(event) { this.menu.toggle(); }, _onScrollEvent: function(actor, event) { //adjust screen brightness on scroll let direction = event.get_scroll_direction(); if (direction == Clutter.ScrollDirection.UP) { this.brightness._proxy.StepUpRemote(function(){}); } else if (direction == Clutter.ScrollDirection.DOWN) { this.brightness._proxy.StepDownRemote(function(){}); } this.brightness._getBrightnessForcedUpdate(); }, _getDeviceStatus: function(device) { let status = "" let [device_id, vendor, model, device_type, icon, percentage, state, seconds] = device; let time = Math.round(seconds / 60); let minutes = time % 60; let hours = Math.floor(time / 60); if (state == UPDeviceState.CHARGING) { if (time == 0) { status = _("Charging"); } else if (time > 60) { if (minutes == 0) { status = ngettext("Charging - %d hour until fully charged", "Charging - %d hours until fully charged", hours).format(hours); } else { /* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */ let template = _("Charging - %d %s %d %s until fully charged"); status = template.format (hours, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes)); } } else { status = ngettext("Charging - %d minute until fully charged", "Charging - %d minutes until fully charged", minutes).format(minutes); } } else if (state == UPDeviceState.FULLY_CHARGED) { status = _("Fully charged"); } else { if (time == 0) { status = _("Using battery power"); } else if (time > 60) { if (minutes == 0) { status = ngettext("Using battery power - %d hour remaining", "Using battery power - %d hours remaining", hours).format(hours); } else { /* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */ let template = _("Using battery power - %d %s %d %s remaining"); status = template.format (hours, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes)); } } else { status = ngettext("Using battery power - %d minute remaining", "Using battery power - %d minutes remaining", minutes).format(minutes); } } return status; }, on_panel_height_changed: function() { if (this._proxy) this._devicesChanged(); }, showDeviceInPanel: function(device) { let [device_id, vendor, model, device_type, icon, percentage, state, seconds] = device; let status = this._getDeviceStatus(device); this.set_applet_tooltip(status); let labelText = ""; if (this.labelinfo == "nothing") { ; } else if (this.labelinfo == "time" && seconds != 0) { let time = Math.round(seconds / 60); let minutes = time % 60; let hours = Math.floor(time / 60); labelText = C_("time of battery remaining", "%d:%02d").format(hours,minutes); } else if (this.labelinfo == "percentage" || (this.labelinfo == "percentage_time" && seconds == 0)) { labelText = C_("percent of battery remaining", "%d%%").format(Math.round(percentage)); } else if (this.labelinfo == "percentage_time") { let time = Math.round(seconds / 60); let minutes = Math.floor(time % 60); let hours = Math.floor(time / 60); labelText = C_("percent of battery remaining", "%d%%").format(Math.round(percentage)) + " (" + C_("time of battery remaining", "%d:%02d").format(hours,minutes) + ")"; } this.set_applet_label(labelText); if (this.labelinfo != "nothing") { this._applet_label.set_margin_left(1.0); } if (icon) { if(this.panel_icon_name != icon) { this.panel_icon_name = icon; this.set_applet_icon_symbolic_name('battery-full'); let gicon = Gio.icon_new_for_string(icon); this._applet_icon.gicon = gicon; } } else { if (this.panel_icon_name != 'battery-full') { this.panel_icon_name = 'battery-full'; this.set_applet_icon_symbolic_name('battery-full'); } } if (device_type == UPDeviceType.BATTERY) { if (percentage > 20) { this._applet_icon.set_style_class_name('system-status-icon'); } else if (percentage > 5) { this._applet_icon.set_style_class_name('system-status-icon warning'); } else { this._applet_icon.set_style_class_name('system-status-icon error'); } } else { this._applet_icon.set_style_class_name ('system-status-icon'); } }, _devicesChanged: function() { this._devices = []; this._primaryDevice = null; if (!this._proxy) return; // Identify the primary battery device this._proxy.GetPrimaryDeviceRemote(Lang.bind(this, function(device, error) { if (error) { this._primaryDeviceId = null; } else { if (device.length == 1) { // Primary Device can be an array of primary devices rather than a single device, in that case, take the first one. device = device[0]; } let [device_id, vendor, model, device_type, icon, percentage, state, seconds] = device this._primaryDeviceId = device_id; } })); // Scan battery devices this._proxy.GetDevicesRemote(Lang.bind(this, function(result, error) { this._deviceItems.forEach(function(i) { i.destroy(); }); this._deviceItems = []; let devices_stats = []; if (!error) { let devices = result[0]; let position = 0; for (let i = 0; i < devices.length; i++) { let [device_id, vendor, model, device_type, icon, percentage, state, seconds] = devices[i]; // Ignore AC_POWER devices if (device_type == UPDeviceType.AC_POWER) continue; // Ignore devices which state is unknown if (state == UPDeviceState.UNKNOWN) continue; let stats = "%s (%d%%)".format(deviceTypeToString(device_type), percentage); devices_stats.push(stats); this._devices.push(devices[i]); if (this._primaryDeviceId == null || this._primaryDeviceId == device_id) { // Info for the primary battery (either the primary device, or any battery device if there is no primary device) if (device_type == UPDeviceType.BATTERY && this._primaryDevice == null) { this._primaryDevice = devices[i]; } } let status = this._getDeviceStatus(devices[i]); let item = new DeviceItem (devices[i], status, this.aliases); this.menu.addMenuItem(item, position); this._deviceItems.push(item); position++; } } else { global.log(error); } // The menu is built. Below, we update the information present in the panel (icon, tooltip and label) this.set_applet_enabled(true); let panel_device = null; if (this._primaryDevice != null) { this.showDeviceInPanel(this._primaryDevice); } else { if (this._devices.length == 1) { this.showDeviceInPanel(this._devices[0]); } else if (this._devices.length > 1) { // Show a summary this.set_applet_tooltip(devices_stats.join(", ")); this.set_applet_label(""); let icon = this._proxy.Icon; if(icon) { if (icon != this.panel_icon_name){ this.panel_icon_name = icon; this.set_applet_icon_symbolic_name('battery-full'); let gicon = Gio.icon_new_for_string(icon); this._applet_icon.gicon = gicon; } } else { if (this.panel_icon_name != 'battery-full') { this.panel_icon_name = 'battery-full'; this.set_applet_icon_symbolic_name('battery-full'); } } } else { // If there are no battery devices, show brightness info or disable the applet if (this.brightness.actor.visible) { // Show the brightness info this.set_applet_tooltip(_("Brightness")); this.panel_icon_name = 'display-brightness'; this.set_applet_icon_symbolic_name('display-brightness'); } else if (this.keyboard.actor.visible) { // Show the brightness info this.set_applet_tooltip(_("Keyboard backlight")); this.panel_icon_name = 'keyboard-brightness'; this.set_applet_icon_symbolic_name('keyboard-brightness'); } else { // Disable the applet this.set_applet_enabled(false); } } } })); }, on_applet_removed_from_panel: function() { Main.systrayManager.unregisterId(this.metadata.uuid); } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/sound@cinnamon.org/0000775000175000017500000000000013215735076024256 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/sound@cinnamon.org/settings-schema.json0000664000175000017500000000314013215735076030245 0ustar fabiofabio{ "section1": { "type": "section", "description" : "Menu" }, "playerControl": { "type": "switch", "default": true, "description": "Control Players" }, "extendedPlayerControl": { "type": "switch", "default": false, "description": "Show Loop and Shuffle controls", "dependency": "playerControl", "indent": true }, "_knownPlayers": { "type": "generic", "default": ["banshee", "vlc", "rhythmbox"] }, "section2": { "type": "section", "description" : "Panel" }, "showtrack": { "type": "switch", "default": false, "description": "Show song information on the panel", "dependency": "playerControl" }, "truncatetext": { "type": "spinbutton", "default": 30, "min": 5, "max": 512, "units": "characters", "step": 1, "description": "Limit song information to", "dependency": "showtrack", "indent": true }, "middleClickAction": { "type": "combobox", "default": "mute", "options": { "Toggle Mute": "mute", "Toggle Play / Pause": "player" }, "description": "Action on middle click" }, "showalbum": { "type": "switch", "default": false, "description": "Show album art as icon", "dependency": "playerControl" }, "hideSystray" : { "type" : "switch", "description" : "Hide system tray icons for compatible players", "default": true } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/sound@cinnamon.org/metadata.json0000664000175000017500000000022213215735076026725 0ustar fabiofabio{ "uuid": "sound@cinnamon.org", "name": "Sound", "description": "A Cinnamon applet to control sound and music", "icon": "audio-volume-high" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js0000664000175000017500000016104213215735076026105 0ustar fabiofabioconst Applet = imports.ui.applet; const Mainloop = imports.mainloop; const Gio = imports.gi.Gio; const Interfaces = imports.misc.interfaces; const Util = imports.misc.util; const Lang = imports.lang; const Cinnamon = imports.gi.Cinnamon; const Clutter = imports.gi.Clutter; const St = imports.gi.St; const PopupMenu = imports.ui.popupMenu; const GLib = imports.gi.GLib; const Cvc = imports.gi.Cvc; const Tooltips = imports.ui.tooltips; const Main = imports.ui.main; const Settings = imports.ui.settings; const Slider = imports.ui.slider; const MEDIA_PLAYER_2_PATH = "/org/mpris/MediaPlayer2"; const MEDIA_PLAYER_2_NAME = "org.mpris.MediaPlayer2"; const MEDIA_PLAYER_2_PLAYER_NAME = "org.mpris.MediaPlayer2.Player"; /* global values */ let players_without_seek_support = ['spotify', 'totem', 'xplayer', 'gnome-mplayer', 'pithos', 'smplayer']; let players_with_seek_support = [ 'clementine', 'banshee', 'rhythmbox', 'rhythmbox3', 'pragha', 'quodlibet', 'amarok', 'xnoise', 'gmusicbrowser', 'vlc', 'qmmp', 'deadbeef', 'audacious']; /* dummy vars for translation */ let x = _("Playing"); x = _("Paused"); x = _("Stopped"); const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */ const ICON_SIZE = 28; function ControlButton() { this._init.apply(this, arguments); } ControlButton.prototype = { _init: function(icon, tooltip, callback, small = false) { this.actor = new St.Bin(); this.button = new St.Button(); this.button.connect('clicked', callback); if(small) this.button.add_style_pseudo_class("small"); this.icon = new St.Icon({ icon_type: St.IconType.SYMBOLIC, icon_name: icon }); this.button.set_child(this.icon); this.actor.add_actor(this.button); this.tooltip = new Tooltips.Tooltip(this.button, tooltip); }, getActor: function() { return this.actor; }, setData: function(icon, tooltip) { this.icon.icon_name = icon; this.tooltip.set_text(tooltip); }, setActive: function(status){ this.button.change_style_pseudo_class("active", status); }, setEnabled: function(status){ this.button.change_style_pseudo_class("disabled", !status); this.button.can_focus = status; this.button.reactive = status; } }; function VolumeSlider(){ this._init.apply(this, arguments); } VolumeSlider.prototype = { __proto__: PopupMenu.PopupSliderMenuItem.prototype, _init: function(applet, stream, tooltip, app_icon){ PopupMenu.PopupSliderMenuItem.prototype._init.call(this, 0); this.applet = applet; if(tooltip) this.tooltipText = tooltip + ": "; else this.tooltipText = ""; this.tooltip = new Tooltips.Tooltip(this.actor, this.tooltipText); this.connect("value-changed", Lang.bind(this, this._onValueChanged)); this.app_icon = app_icon; if (this.app_icon == null) { this.iconName = this.isMic ? "microphone-sensitivity-none" : "audio-volume-muted"; this.icon = new St.Icon({icon_name: this.iconName, icon_type: St.IconType.SYMBOLIC, icon_size: 16}); } else { this.icon = new St.Icon({icon_name: this.app_icon, icon_type: St.IconType.FULLCOLOR, icon_size: 16}); } this.removeActor(this._slider); this.addActor(this.icon, {span: 0}); this.addActor(this._slider, {span: -1, expand: true}); this.connectWithStream(stream); }, connectWithStream: function(stream){ if(!stream){ this.actor.hide(); this.stream = null; } else { this.actor.show(); this.stream = stream; this.isMic = stream instanceof Cvc.MixerSource || stream instanceof Cvc.MixerSourceOutput; let mutedId = stream.connect("notify::is-muted", Lang.bind(this, this._update)); let volumeId = stream.connect("notify::volume", Lang.bind(this, this._update)); this.connect("destroy", function(){ stream.disconnect(mutedId); stream.disconnect(volumeId); }); } this._update(); }, _onValueChanged: function(){ if(!this.stream) return; let volume = this._value * this.applet._volumeMax, muted; if(this._value < 0.005){ volume = 0; muted = true; } else { muted = false; } this.stream.volume = volume; this.stream.push_volume(); if(this.stream.is_muted !== muted) this.stream.change_is_muted(muted); if(!this._dragging) this.applet._notifyVolumeChange(this.stream); }, _update: function(){ let value = (!this.stream || this.stream.is_muted)? 0 : this.stream.volume / this.applet._volumeMax; let percentage = Math.round(value * 100) + "%"; this.tooltip.set_text(this.tooltipText + percentage); let iconName = this._volumeToIcon(value); if (this.app_icon == null) { this.icon.icon_name = iconName; } this.setValue(value); // send data to applet this.emit("values-changed", iconName, percentage); }, _volumeToIcon: function(value){ if(value < 0.005) return this.isMic? "microphone-sensitivity-none" : "audio-volume-muted"; let n = Math.floor(3 * value), icon; if(n < 1) icon = "low"; else if(n < 2) icon = "medium"; else icon = "high"; return this.isMic? "microphone-sensitivity-" + icon : "audio-volume-" + icon; } }; function StreamMenuSection(){ this._init.apply(this, arguments); } StreamMenuSection.prototype = { __proto__: PopupMenu.PopupMenuSection.prototype, _init: function(applet, stream){ PopupMenu.PopupMenuSection.prototype._init.call(this); let iconName = stream.icon_name; let name = stream.name; // capitalize the stream name if (name.length > 2) { name = name.charAt(0).toUpperCase() + name.slice(1); } // Trim stream name if(name.length > 16) { name = name.substring(0, 16) + "... "; } // Special cases if(name === "Banshee") { iconName = "banshee"; } else if (name === "Spotify") { iconName = "spotify"; } if(name === "VBox") { name = "Virtualbox"; iconName = "virtualbox"; } else if (iconName === "audio") { iconName = "audio-x-generic"; } let slider = new VolumeSlider(applet, stream, name, iconName); this.addMenuItem(slider); } }; function Player() { this._init.apply(this, arguments); } Player.prototype = { __proto__: PopupMenu.PopupMenuSection.prototype, _init: function(applet, busname, owner) { PopupMenu.PopupMenuSection.prototype._init.call(this); this.showPosition = true; this._owner = owner; this._busName = busname; this._applet = applet; this._name = this._busName.split('.')[3]; this._songLength = 0; Interfaces.getDBusProxyWithOwnerAsync(MEDIA_PLAYER_2_NAME, this._busName, Lang.bind(this, function(proxy, error) { if (error) { log(error); } else { this._mediaServer = proxy; this._dbus_acquired(); } })); Interfaces.getDBusProxyWithOwnerAsync(MEDIA_PLAYER_2_PLAYER_NAME, this._busName, Lang.bind(this, function(proxy, error) { if (error) { log(error) } else { this._mediaServerPlayer = proxy; this._dbus_acquired(); } })); Interfaces.getDBusPropertiesAsync(this._busName, MEDIA_PLAYER_2_PATH, Lang.bind(this, function(proxy, error) { if (error) { log(error) } else { this._prop = proxy; this._dbus_acquired(); } })); }, _dbus_acquired: function() { if (!this._prop || !this._mediaServerPlayer || !this._mediaServer) return; let mainBox = new PopupMenu.PopupMenuSection(); this.addMenuItem(mainBox); this.vertBox = new St.BoxLayout({ style_class: "sound-player", important: true, vertical: true }); mainBox.addActor(this.vertBox, { expand: false }); // Player info let playerBox = new St.BoxLayout(); this.playerIcon = new St.Icon({icon_type: St.IconType.SYMBOLIC, style_class: "popup-menu-icon"}); this.playerLabel = new St.Label({y_expand: true, y_align: Clutter.ActorAlign.CENTER}); playerBox.add_actor(this.playerIcon); playerBox.add_actor(this.playerLabel); if (this._mediaServer.CanRaise) { let btn = new ControlButton("go-up", _("Open Player"), Lang.bind(this, function(){ if (this._name === "spotify") { // Spotify isn't able to raise via Dbus once its main UI is closed Util.spawn(['spotify']); } else { this._mediaServer.RaiseRemote(); } this._applet.menu.close(); }), true); playerBox.add_actor(btn.actor); } if (this._mediaServer.CanQuit) { let btn = new ControlButton("window-close", _("Quit Player"), Lang.bind(this, function(){ this._mediaServer.QuitRemote(); this._applet.menu.close(); }), true); playerBox.add_actor(btn.actor); } this.vertBox.add_actor(playerBox); // Cover Box (art + track info) this._trackCover = new St.Bin({x_align: St.Align.MIDDLE}); this._trackCoverFile = this._trackCoverFileTmp = false; this.coverBox = new Clutter.Box(); let l = new Clutter.BinLayout({x_align: Clutter.BinAlignment.FILL, y_align: Clutter.BinAlignment.END}); this.coverBox.set_layout_manager(l); // Cover art this.cover = new St.Icon({icon_name: "media-optical", icon_size: 300, icon_type: St.IconType.FULLCOLOR}); this.coverBox.add_actor(this.cover); // Track info (artist + title) this._artist = _("Unknown Artist"); this._album = _("Unknown Album"); this._title = _("Unknown Title"); this.trackInfo = new St.BoxLayout({style_class: 'sound-player-overlay', important: true, vertical: true}); let artistInfo = new St.BoxLayout(); let artistIcon = new St.Icon({ icon_type: St.IconType.SYMBOLIC, icon_name: "system-users", style_class: 'popup-menu-icon' }); this.artistLabel = new St.Label({text:this._artist}); artistInfo.add_actor(artistIcon); artistInfo.add_actor(this.artistLabel); let titleInfo = new St.BoxLayout(); let titleIcon = new St.Icon({ icon_type: St.IconType.SYMBOLIC, icon_name: "audio-x-generic", style_class: 'popup-menu-icon' }); this.titleLabel = new St.Label({text:this._title}); titleInfo.add_actor(titleIcon); titleInfo.add_actor(this.titleLabel); this.trackInfo.add_actor(artistInfo); this.trackInfo.add_actor(titleInfo); this.coverBox.add_actor(this.trackInfo); this._trackCover.set_child(this.coverBox); this.vertBox.add_actor(this._trackCover); // Playback controls let trackControls = new St.Bin({x_align: St.Align.MIDDLE}); this._prevButton = new ControlButton("media-skip-backward", _("Previous"), Lang.bind(this, function(){ this._mediaServerPlayer.PreviousRemote(); })); this._playButton = new ControlButton("media-playback-start", _("Play"), Lang.bind(this, function(){ this._mediaServerPlayer.PlayPauseRemote(); })); this._stopButton = new ControlButton("media-playback-stop", _("Stop"), Lang.bind(this, function(){ this._mediaServerPlayer.StopRemote(); })); this._nextButton = new ControlButton("media-skip-forward", _("Next"), Lang.bind(this, function(){ this._mediaServerPlayer.NextRemote(); })); this.trackInfo.add_actor(trackControls); this.controls = new St.BoxLayout(); this.controls.add_actor(this._prevButton.getActor()); this.controls.add_actor(this._playButton.getActor()); this.controls.add_actor(this._stopButton.getActor()); this.controls.add_actor(this._nextButton.getActor()); trackControls.set_child(this.controls); if(this._mediaServerPlayer.LoopStatus){ this._loopButton = new ControlButton("media-playlist-consecutive", _("Consecutive Playing"), Lang.bind(this, this._toggleLoopStatus)); this._loopButton.actor.visible = this._applet.extendedPlayerControl; this.controls.add_actor(this._loopButton.getActor()); this._setLoopStatus(this._mediaServerPlayer.LoopStatus); } if(this._mediaServerPlayer.Shuffle !== undefined){ this._shuffleButton = new ControlButton("media-playlist-shuffle", _("No Shuffle"), Lang.bind(this, this._toggleShuffle)); this._shuffleButton.actor.visible = this._applet.extendedPlayerControl; this.controls.add_actor(this._shuffleButton.getActor()); this._setShuffle(this._mediaServerPlayer.Shuffle); } // Position slider this._positionSlider = new Slider.Slider(0, true); this._seeking = false; this._positionSlider.connect('drag-begin', Lang.bind(this, function(item) { this._seeking = true; })); this._positionSlider.connect('drag-end', Lang.bind(this, function(item) { this._seeking = false; this._setPosition("slider"); })); this._positionSlider.connect('value-changed', Lang.bind(this, function(item) { //update the label virtually if we are seeking, else set the value (scroll event) if(!this._seeking) this._setPosition("slider"); })); this.vertBox.add_actor(this._positionSlider.actor); this._applet._updatePlayerMenuItems(); /* these players don't support seek */ if (!this._getCanSeek() || this._mediaServerPlayer.Rate != 1) { this.showPosition = false; this._positionSlider.actor.hide(); } this._timeoutId = 0; this._setStatus(this._mediaServerPlayer.PlaybackStatus); this._trackId = {}; this._setMetadata(this._mediaServerPlayer.Metadata); this._currentTime = 0; this._timerTicker = 0; this._wantedSeekValue = 0; this._updatePositionSlider(); this._mediaServerPlayerId = this._mediaServerPlayer.connectSignal('Seeked', Lang.bind(this, function(id, sender, value) { if (value > 0) { this._setPosition(value); } // Seek initiated by the position slider else if (this._wantedSeekValue > 0) { // Some broken gstreamer players (Banshee) reports always 0 // when the track is seeked so we set the position at the // value we set on the slider this._setPosition(this._wantedSeekValue); } // Seek value send by the player else this._setPosition(value); this._wantedSeekValue = 0; })); this._propChangedId = this._prop.connectSignal('PropertiesChanged', Lang.bind(this, function(proxy, sender, [iface, props]) { if (props.PlaybackStatus) this._setStatus(props.PlaybackStatus.unpack()); if (props.Metadata) this._setMetadata(props.Metadata.deep_unpack()); if (props.CanGoNext || props.CanGoPrevious) this._updateControls(); if (props.LoopStatus) this._setLoopStatus(props.LoopStatus.unpack()); if (props.Shuffle) this._setShuffle(props.Shuffle.unpack()); })); //get the desktop entry and pass it to the applet this._prop.GetRemote(MEDIA_PLAYER_2_NAME, "DesktopEntry", Lang.bind(this, function(value){ this._applet.passDesktopEntry(value[0].unpack()); })); this._getPosition(); }, _getName: function() { return this._name.charAt(0).toUpperCase() + this._name.slice(1); }, _setName: function(status) { this.playerLabel.set_text(this._getName() + " - " + _(status)); }, _updateControls: function() { this._prop.GetRemote(MEDIA_PLAYER_2_PLAYER_NAME, 'CanGoNext', Lang.bind(this, function(value, err) { let canGoNext = true; if (!err) canGoNext = value[0].unpack(); this._nextButton.setEnabled(canGoNext); }) ); this._prop.GetRemote(MEDIA_PLAYER_2_PLAYER_NAME, 'CanGoPrevious', Lang.bind(this, function(value, err) { let canGoPrevious = true; if (!err) canGoPrevious = value[0].unpack(); this._prevButton.setEnabled(canGoPrevious); }) ); }, _updatePositionSlider: function(position) { this._canSeek = this._getCanSeek(); if (this._songLength == 0 || position == false) this._canSeek = false; }, _setPosition: function(value) { if(value === "slider"){ let time = this._positionSlider._value * this._songLength; this._wantedSeekValue = Math.round(time * 1000000); this._mediaServerPlayer.SetPositionRemote(this._trackObj, time * 1000000); } else if (value == null && this._playerStatus != 'Stopped') { this._updatePositionSlider(false); } else { this._currentTime = value / 1000000; this._updateTimer(); } }, _getPosition: function() { this._prop.GetRemote(MEDIA_PLAYER_2_PLAYER_NAME, 'Position', Lang.bind(this, function(position, ex) { if (!ex) { this._setPosition(position[0].get_int64()); } })); }, _getCanSeek: function() { let can_seek = true; this._prop.GetRemote(MEDIA_PLAYER_2_PLAYER_NAME, 'CanSeek', Lang.bind(this, function(position, ex) { if (!ex) { can_seek = position[0].get_boolean(); } })); // Some players say they "CanSeek" but don't actually give their position over dbus (spotify for instance) for (let i = 0; i < players_without_seek_support.length; i++) { if (players_without_seek_support[i] === this._name) { can_seek = false; break; } } return can_seek; }, _setMetadata: function(metadata) { if (!metadata) return; if (metadata["mpris:length"]) { this._stopTimer(); if (this._playerStatus == "Playing") this._runTimer(); // song length in secs this._songLength = metadata["mpris:length"].unpack() / 1000000; } else { this._songLength = 0; this._stopTimer(); } if (metadata["xesam:artist"]) { switch (metadata["xesam:artist"].get_type_string()) { case 's': // smplayer sends a string this._artist = metadata["xesam:artist"].unpack(); break; case 'as': // others send an array of strings this._artist = metadata["xesam:artist"].deep_unpack().join(", "); break; default: this._artist = _("Unknown Artist"); } } else this._artist = _("Unknown Artist"); this.artistLabel.set_text(this._artist); if (metadata["xesam:album"]) this._album = metadata["xesam:album"].unpack(); else this._album = _("Unknown Album"); if (metadata["xesam:title"]) this._title = metadata["xesam:title"].unpack(); else this._title = _("Unknown Title"); this.titleLabel.set_text(this._title); if (metadata["mpris:trackid"]) { this._trackObj = metadata["mpris:trackid"].unpack(); } let change = false; if (metadata["mpris:artUrl"]) { let artUrl = metadata["mpris:artUrl"].unpack(); if ( this._name === "spotify" ) { artUrl = artUrl.replace("/thumb/", "/300/"); // Spotify 0.9.x artUrl = artUrl.replace("/image/", "/300/"); // Spotify 0.27.x } if (this._trackCoverFile != artUrl) { this._trackCoverFile = artUrl; change = true; } } else { if (this._trackCoverFile != false) { this._trackCoverFile = false; change = true; } } if (change) { if (this._trackCoverFile) { let cover_path = ""; if (this._trackCoverFile.match(/^http/)) { this._hideCover(); this._trackCoverFileTmp = Gio.file_new_tmp('XXXXXX.mediaplayer-cover')[0]; Util.spawn_async(['wget', this._trackCoverFile, '-O', this._trackCoverFileTmp.get_path()], Lang.bind(this, this._onDownloadedCover)); } else { cover_path = decodeURIComponent(this._trackCoverFile); cover_path = cover_path.replace("file://", ""); this._showCover(cover_path); } } else this._showCover(false); } this._applet.setAppletTextIcon(this, true); }, _setStatus: function(status) { if (!status) return; this._updatePositionSlider(); this._playerStatus = status; if (status == "Playing") { this._playButton.setData("media-playback-pause", _("Pause")); this.playerIcon.set_icon_name("media-playback-start"); this._applet.setAppletTextIcon(this, true); this._runTimer(); } else if (status == "Paused") { this._playButton.setData("media-playback-start", _("Play")); this.playerIcon.set_icon_name("media-playback-pause"); this._applet.setAppletTextIcon(this, false); this._pauseTimer(); } else if (status == "Stopped") { this._playButton.setData("media-playback-start", _("Play")); this.playerIcon.set_icon_name("media-playback-stop"); this._applet.setAppletTextIcon(this, false); this._stopTimer(); } else { this._applet.setAppletTextIcon(this, false); } this._setName(status); }, _toggleLoopStatus: function(){ let mapping = { "None": "Playlist", "Playlist": "Track", "Track": "None" }; this._mediaServerPlayer.LoopStatus = mapping[this._mediaServerPlayer.LoopStatus]; this._setLoopStatus(this._mediaServerPlayer.LoopStatus); }, _setLoopStatus: function(status){ if(status === "None") this._loopButton.setData("media-playlist-consecutive-symbolic", _("Consecutive Playing")); else if(status === "Track") this._loopButton.setData("media-playlist-repeat-song", _("Repeat Single")); else if(status === "Playlist") this._loopButton.setData("media-playlist-repeat", _("Repeat All")); this._loopButton.setActive(status !== "None"); }, _toggleShuffle: function(){ this._mediaServerPlayer.Shuffle = !this._mediaServerPlayer.Shuffle; }, _setShuffle: function(status){ this._shuffleButton.setData("media-playlist-shuffle", status? _("Shuffle") : _("No Shuffle")); this._shuffleButton.setActive(status); }, _updateTimer: function() { if (!this._seeking && this.showPosition && this._canSeek) { if (!isNaN(this._currentTime) && !isNaN(this._songLength) && this._currentTime > 0) this._positionSlider.setValue(this._currentTime / this._songLength); else this._positionSlider.setValue(0); } }, _runTimerCallback: function() { if (this._playerStatus == 'Playing') { if (this._timerTicker < 10) { this._currentTime += 1; this._timerTicker++; this._updateTimer(); } else { this._getPosition(); this._timerTicker = 0; } return true; } return false; }, _runTimer: function() { if (this._canSeek) { if (this._timeoutId != 0) { Mainloop.source_remove(this._timeoutId); this._timeoutId = 0; } if (this._playerStatus == 'Playing') { this._getPosition(); this._timerTicker = 0; this._timeoutId = Mainloop.timeout_add(1000, Lang.bind(this, this._runTimerCallback)); } } }, _pauseTimer: function() { if (this._timeoutId != 0) { Mainloop.source_remove(this._timeoutId); this._timeoutId = 0; } this._updateTimer(); }, _stopTimer: function() { this._currentTime = 0; this._pauseTimer(); this._updateTimer(); }, _onDownloadedCover: function() { let cover_path = this._trackCoverFileTmp.get_path(); this._showCover(cover_path); }, _hideCover: function() { /*Tweener.addTween(this.trackCoverContainer, { opacity: 0, time: 0.3, transition: 'easeOutCubic', });*/ }, _showCover: function(cover_path) { /*Tweener.addTween(this._trackCover, { opacity: 0, time: 0.3, transition: 'easeOutCubic', onComplete: Lang.bind(this, function() {*/ this.coverBox.remove_actor(this.cover); if (! cover_path || ! GLib.file_test(cover_path, GLib.FileTest.EXISTS)) { this.cover = new St.Icon({style_class: 'sound-player-generic-coverart', important: true, icon_name: "media-optical", icon_size: 300, icon_type: St.IconType.FULLCOLOR}); cover_path = null; } else { this.cover = new Clutter.Texture({width: 300, keep_aspect_ratio: true, filter_quality: 2, filename: cover_path}); } this.coverBox.add_actor(this.cover); this.coverBox.set_child_below_sibling(this.cover, this.trackInfo); this._applet.setAppletTextIcon(this, cover_path); /*Tweener.addTween(this._trackCover, { opacity: 255, time: 0.3, transition: 'easeInCubic' }); }) });*/ }, onSettingsChanged: function(){ this._loopButton.actor.visible = this._applet.extendedPlayerControl; this._shuffleButton.actor.visible = this._applet.extendedPlayerControl; }, destroy: function() { if (this._timeoutId != 0) { Mainloop.source_remove(this._timeoutId); this._timeoutId = 0; } if (this._mediaServerPlayer) this._mediaServerPlayer.disconnectSignal(this._mediaServerPlayerId); if (this._prop) this._prop.disconnectSignal(this._propChangedId); PopupMenu.PopupMenuSection.prototype.destroy.call(this); } }; function MediaPlayerLauncher(app, menu) { this._init(app, menu); } MediaPlayerLauncher.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function (app, menu) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {}); this._app = app; this._menu = menu; this.label = new St.Label({ text: app.get_name() }); this.addActor(this.label); this._icon = app.create_icon_texture(ICON_SIZE); this.addActor(this._icon, { expand: false }); this.connect("activate", Lang.bind(this, this._onActivate)); }, _onActivate: function(actor, event, keepMenu) { this._app.activate_full(-1, event.get_time()); } }; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this.metadata = metadata; this.settings = new Settings.AppletSettings(this, metadata.uuid, instanceId); this.settings.bind("showtrack", "showtrack", this.on_settings_changed); this.settings.bind("middleClickAction", "middleClickAction"); this.settings.bind("showalbum", "showalbum", this.on_settings_changed); this.settings.bind("truncatetext", "truncatetext", this.on_settings_changed); this.settings.bind("hideSystray", "hideSystray", function() { if (this.hideSystray) this.registerSystrayIcons(); else this.unregisterSystrayIcons(); }); this.settings.bind("playerControl", "playerControl", this.on_settings_changed); this.settings.bind("extendedPlayerControl", "extendedPlayerControl", function(){ for(let i in this._players) this._players[i].onSettingsChanged(); }); this.settings.bind("_knownPlayers", "_knownPlayers"); if (this.hideSystray) this.registerSystrayIcons(); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.set_applet_icon_symbolic_name('audio-x-generic'); this._players = {}; this._playerItems = []; this._activePlayer = null; Interfaces.getDBusAsync(Lang.bind(this, function (proxy, error) { this._dbus = proxy; // player DBus name pattern let name_regex = /^org\.mpris\.MediaPlayer2\./; // load players this._dbus.ListNamesRemote(Lang.bind(this, function(names) { for (let n in names[0]) { let name = names[0][n]; if (name_regex.test(name)) { this._dbus.GetNameOwnerRemote(name, Lang.bind(this, function(owner) { this._addPlayer(name, owner); } )); } } } )); // watch players this._ownerChangedId = this._dbus.connectSignal('NameOwnerChanged', Lang.bind(this, function(proxy, sender, [name, old_owner, new_owner]) { if (name_regex.test(name)) { if (new_owner && !old_owner) this._addPlayer(name, new_owner); else if (old_owner && !new_owner) this._removePlayer(name, old_owner); else this._changePlayerOwner(name, old_owner, new_owner); } } )); })); this._control = new Cvc.MixerControl({ name: 'Cinnamon Volume Control' }); this._control.connect('state-changed', Lang.bind(this, this._onControlStateChanged)); this._control.connect('output-added', Lang.bind(this, this._onDeviceAdded, "output")); this._control.connect('output-removed', Lang.bind(this, this._onDeviceRemoved, "output")); this._control.connect('active-output-update', Lang.bind(this, this._onDeviceUpdate, "output")); this._control.connect('input-added', Lang.bind(this, this._onDeviceAdded, "input")); this._control.connect('input-removed', Lang.bind(this, this._onDeviceRemoved, "input")); this._control.connect('active-input-update', Lang.bind(this, this._onDeviceUpdate, "input")); this._control.connect('stream-added', Lang.bind(this, this._onStreamAdded)); this._control.connect('stream-removed', Lang.bind(this, this._onStreamRemoved)); this._volumeMax = 1*this._control.get_vol_max_norm(); // previously was 1.5*this._control.get_vol_max_norm();, but we'd need a little mark on the slider to make it obvious to the user we're going over 100%.. this._streams = []; this._devices = []; this._recordingAppsNum = 0; this._output = null; this._outputMutedId = 0; this._outputIcon = "audio-volume-muted"; this._input = null; this._inputMutedId = 0; this._icon_name = ''; this._icon_path = null; this._iconTimeoutId = 0; this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); this.mute_out_switch = new PopupMenu.PopupSwitchIconMenuItem(_("Mute output"), false, "audio-volume-muted", St.IconType.SYMBOLIC); this.mute_in_switch = new PopupMenu.PopupSwitchIconMenuItem(_("Mute input"), false, "microphone-sensitivity-none", St.IconType.SYMBOLIC); this._applet_context_menu.addMenuItem(this.mute_out_switch); this._applet_context_menu.addMenuItem(this.mute_in_switch); this._applet_context_menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._outputApplicationsMenu = new PopupMenu.PopupSubMenuMenuItem(_("Applications")); this._selectOutputDeviceItem = new PopupMenu.PopupSubMenuMenuItem(_("Output device")); this._applet_context_menu.addMenuItem(this._outputApplicationsMenu); this._applet_context_menu.addMenuItem(this._selectOutputDeviceItem); this._outputApplicationsMenu.actor.hide(); this._selectOutputDeviceItem.actor.hide(); this._inputSection = new PopupMenu.PopupMenuSection(); this._inputVolumeSection = new VolumeSlider(this, null, _("Microphone"), null); this._inputVolumeSection.connect("values-changed", Lang.bind(this, this._inputValuesChanged)); this._selectInputDeviceItem = new PopupMenu.PopupSubMenuMenuItem(_("Input device")); this._inputSection.addMenuItem(this._inputVolumeSection); this._inputSection.addMenuItem(this._selectInputDeviceItem); this._applet_context_menu.addMenuItem(this._inputSection); this._selectInputDeviceItem.actor.hide(); this._inputSection.actor.hide(); this._applet_context_menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.mute_out_switch.connect('toggled', Lang.bind(this, this._toggle_out_mute)); this.mute_in_switch.connect('toggled', Lang.bind(this, this._toggle_in_mute)); this._control.open(); this._volumeControlShown = false; this._showFixedElements(); this.set_show_label_in_vertical_panels(false); this.set_applet_label(this._applet_label.get_text()); let appsys = Cinnamon.AppSystem.get_default(); appsys.connect("installed-changed", Lang.bind(this, this._updateLaunchPlayer)); } catch (e) { global.logError(e); } }, on_settings_changed : function() { if(this.playerControl && this._activePlayer) this.setAppletTextIcon(this._players[this._activePlayer], true); else this.setAppletTextIcon(); this._changeActivePlayer(this._activePlayer); }, on_applet_removed_from_panel : function() { if (this.hideSystray) this.unregisterSystrayIcons(); if (this._iconTimeoutId) { Mainloop.source_remove(this._iconTimeoutId); } this._dbus.disconnectSignal(this._ownerChangedId); for(let i in this._players) this._players[i].destroy(); }, on_applet_clicked: function(event) { this.menu.toggle(); }, _toggle_out_mute: function() { if (this._output.is_muted) { this._output.change_is_muted(false); this.mute_out_switch.setToggleState(false); } else { this._output.change_is_muted(true); this.mute_out_switch.setToggleState(true); } }, _toggle_in_mute: function() { if (this._input.is_muted) { this._input.change_is_muted(false); this.mute_in_switch.setToggleState(false); } else { this._input.change_is_muted(true); this.mute_in_switch.setToggleState(true); } }, _onScrollEvent: function(actor, event) { let direction = event.get_scroll_direction(); let currentVolume = this._output.volume; if (direction == Clutter.ScrollDirection.DOWN) { let prev_muted = this._output.is_muted; this._output.volume = Math.max(0, currentVolume - this._volumeMax * VOLUME_ADJUSTMENT_STEP); if (this._output.volume < 1) { this._output.volume = 0; if (!prev_muted) this._output.change_is_muted(true); } this._output.push_volume(); } else if (direction == Clutter.ScrollDirection.UP) { this._output.volume = Math.min(this._volumeMax, currentVolume + this._volumeMax * VOLUME_ADJUSTMENT_STEP); this._output.push_volume(); this._output.change_is_muted(false); } this._notifyVolumeChange(this._output); }, _onButtonPressEvent: function (actor, event) { let buttonId = event.get_button(); //mute or play / pause players on middle click if (buttonId === 2) { if (this.middleClickAction === "mute") this._toggle_out_mute(); else if (this.middleClickAction === "player") this._players[this._activePlayer]._mediaServerPlayer.PlayPauseRemote(); } else if (buttonId === 8) { // previous and next track on mouse buttons 4 and 5 (8 and 9 by X11 numbering) this._players[this._activePlayer]._mediaServerPlayer.PreviousRemote(); } else if (buttonId === 9) { this._players[this._activePlayer]._mediaServerPlayer.NextRemote(); } return Applet.Applet.prototype._onButtonPressEvent.call(this, actor, event); }, setIcon: function(icon, source) { if (this._iconTimeoutId) { Mainloop.source_remove(this._iconTimeoutId); this._iconTimeoutId = null; } //save the icon if (source) { if (source === "output") this._outputIcon = icon; else this._playerIcon = [icon, source === "player-path"]; } if (this.playerControl && this._activePlayer && this._playerIcon[0]) { if (source === "output") { //if we have an active player, but are changing the volume, show the output icon and after three seconds change back to the player icon this.set_applet_icon_symbolic_name(this._outputIcon); this._iconTimeoutId = Mainloop.timeout_add(3000, Lang.bind(this, function() { this._iconTimeoutId = null; this.setIcon(); })); } else { //if we have an active player and want to change the icon, change it immediately if (this._playerIcon[1]) this.set_applet_icon_path(this._playerIcon[0]); else this.set_applet_icon_symbolic_name(this._playerIcon[0]); } } else { //if we have no active player show the output icon this.set_applet_icon_symbolic_name(this._outputIcon); } }, setAppletIcon: function(player, path) { if (path) { if (path === true) { // Restore the icon path from the saved path. path = this._icon_path; } else { this._icon_path = path; } } else if (path === null) { // This track has no art, erase the saved path. this._icon_path = null; } if (this.showalbum) { if (path && player && (player === true || player._playerStatus == 'Playing')) { this.setIcon(path, "player-path"); } else { this.setIcon('media-optical-cd-audio', 'player-name'); } } else { this.setIcon('audio-x-generic', 'player-name'); } }, setAppletText: function(player) { let title_text = ""; if (this.showtrack && player && player._playerStatus == 'Playing') { title_text = player._title + ' - ' + player._artist; if (this.truncatetext < title_text.length) { title_text = title_text.substr(0, this.truncatetext) + "..."; } } this.set_applet_label(title_text); }, setAppletTextIcon: function(player, icon) { if (player && player._owner != this._activePlayer) return; this.setAppletIcon(player, icon); this.setAppletText(player); }, _isInstance: function(busName) { // MPRIS instances are in the form // org.mpris.MediaPlayer2.name.instanceXXXX // ...except for VLC, which to this day uses // org.mpris.MediaPlayer2.name-XXXX return busName.split('.').length > 4 || /^org\.mpris\.MediaPlayer2\.vlc-\d+$/.test(busName); }, _addPlayer: function(busName, owner) { if (this._players[owner]) { let prevName = this._players[owner]._busName; // HAVE: ADDING: ACTION: // master master reject, cannot happen // master instance upgrade to instance // instance master reject, duplicate // instance instance reject, cannot happen if (this._isInstance(busName) && !this._isInstance(prevName)) this._players[owner]._busName = busName; else return; } else if (owner) { let player = new Player(this, busName, owner); // Add the player to the list of active players in GUI let item = new PopupMenu.PopupMenuItem(player._getName()); item.activate = Lang.bind(this, function() { this._switchPlayer(player._owner); }); this._chooseActivePlayerItem.menu.addMenuItem(item); this._players[owner] = player; this._playerItems.push({ player: player, item: item }); this._changeActivePlayer(owner); this._updatePlayerMenuItems(); this.setAppletTextIcon(); } }, _switchPlayer: function(owner) { if(this._players[owner]) { // The player exists, switch to it this._changeActivePlayer(owner); this._updatePlayerMenuItems(); this.setAppletTextIcon(); } else { // The player doesn't seem to exist. Remove it from the players list this._removePlayerItem(owner); this._updatePlayerMenuItems(); } }, _removePlayerItem: function(owner) { // Remove the player from the player switching list for(let i = 0, l = this._playerItems.length; i < l; ++i) { let playerItem = this._playerItems[i]; if(playerItem.player._owner === owner) { playerItem.item.destroy(); this._playerItems.splice(i, 1); break; } } }, _removePlayer: function(busName, owner) { if (this._players[owner] && this._players[owner]._busName == busName) { this._removePlayerItem(owner); this._players[owner].destroy(); delete this._players[owner]; if (this._activePlayer == owner) { //set _activePlayer to null if we have none now, or to the first value in the players list this._activePlayer = null; for (let i in this._players) { this._changeActivePlayer(i); break; } } this._updatePlayerMenuItems(); this.setAppletTextIcon(); } }, _changePlayerOwner: function(busName, oldOwner, newOwner) { if (this._players[oldOwner] && busName == this._players[oldOwner]._busName) { this._players[newOwner] = this._players[oldOwner]; this._players[newOwner]._owner = newOwner; delete this._players[oldOwner]; if (this._activePlayer == oldOwner) this._activePlayer = newOwner; } }, //will be called by an instance of #Player passDesktopEntry: function(entry){ //do we know already this player? for (let i = 0, l = this._knownPlayers.length; i < l; ++i) { if (this._knownPlayers[i] === entry) return; } //No, save it to _knownPlayers and update player list this._knownPlayers.push(entry); this._knownPlayers.save(); this._updateLaunchPlayer(); }, _showFixedElements: function() { // The list to use when switching between active players this._chooseActivePlayerItem = new PopupMenu.PopupSubMenuMenuItem(_("Choose player controls")); this._chooseActivePlayerItem.actor.hide(); this.menu.addMenuItem(this._chooseActivePlayerItem); // The launch player list this._launchPlayerItem = new PopupMenu.PopupSubMenuMenuItem(_("Launch player")); this.menu.addMenuItem(this._launchPlayerItem); this._updateLaunchPlayer(); //between these two separators will be the player MenuSection (position 3) this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._outputVolumeSection = new VolumeSlider(this, null, _("Volume"), null); this._outputVolumeSection.connect("values-changed", Lang.bind(this, this._outputValuesChanged)); this.menu.addMenuItem(this._outputVolumeSection); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addSettingsAction(_("Sound Settings"), 'sound'); }, _updateLaunchPlayer: function() { let availablePlayers = []; let appsys = Cinnamon.AppSystem.get_default(); //_knownPlayers is an array containing the paths of desktop files for(let i = 0, l = this._knownPlayers.length; i < l; ++i){ let app = appsys.lookup_app(this._knownPlayers[i] + ".desktop"); if (app) availablePlayers.push(app); } this._launchPlayerItem.menu.removeAll(); if (availablePlayers.length > 0) { for (var p = 0; p < availablePlayers.length; p++) { let playerApp = availablePlayers[p]; let menuItem = new MediaPlayerLauncher(playerApp, this._launchPlayerItem.menu); this._launchPlayerItem.menu.addMenuItem(menuItem); } } else { this._launchPlayerItem.actor.hide(); } }, _updatePlayerMenuItems: function() { if (this.playerControl && this._activePlayer) { this._launchPlayerItem.actor.hide(); this._chooseActivePlayerItem.actor.show(); // Show a dot on the active player in the switching menu for (let i = 0, l = this._playerItems.length; i < l; ++i) { let playerItem = this._playerItems[i]; playerItem.item.setShowDot(playerItem.player._owner === this._activePlayer); } // Hide the switching menu if we only have at most one active player if(this._chooseActivePlayerItem.menu.numMenuItems <= 1) { this._chooseActivePlayerItem.actor.hide(); } } else { if (this._launchPlayerItem.menu.numMenuItems) { this._launchPlayerItem.actor.show(); } else { this._launchPlayerItem.actor.hide(); } } }, _changeActivePlayer: function(player) { if (this._activePlayer) this.menu.box.remove_actor(this._players[this._activePlayer].actor); this._activePlayer = player; if (this.playerControl && this._activePlayer != null) { this.menu.addMenuItem(this._players[player], 1); } this._updatePlayerMenuItems(); }, _notifyVolumeChange: function(stream) { Main.soundManager.playVolume('volume', stream.decibel); }, _mutedChanged: function(object, param_spec, property) { if (property == "_output") { this.mute_out_switch.setToggleState(this._output.is_muted); } else if (property == "_input") { this.mute_in_switch.setToggleState(this._input.is_muted); } }, _outputValuesChanged: function(actor, iconName, percentage) { this.setIcon(iconName, "output"); this.mute_out_switch.setIconSymbolicName(iconName); this.set_applet_tooltip(_("Volume") + ": " + percentage); }, _inputValuesChanged: function(actor, iconName) { this.mute_in_switch.setIconSymbolicName(iconName); }, _onControlStateChanged: function() { if (this._control.get_state() == Cvc.MixerControlState.READY) { this._readOutput(); this._readInput(); this.actor.show(); } else { this.actor.hide(); } }, _readOutput: function() { if (this._outputMutedId) { this._output.disconnect(this._outputMutedId); this._outputMutedId = 0; } this._output = this._control.get_default_sink(); if (this._output) { this._outputVolumeSection.connectWithStream(this._output); this._outputMutedId = this._output.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_output')); this._mutedChanged (null, null, '_output'); } else { this.setIcon("audio-volume-muted-symbolic", "output"); } }, _readInput: function() { if (this._inputMutedId) { this._input.disconnect(this._inputMutedId); this._inputMutedId = 0; } this._input = this._control.get_default_source(); if (this._input) { this._inputVolumeSection.connectWithStream(this._input); this._inputMutedId = this._input.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_input')); this._mutedChanged (null, null, '_input'); } else { this._inputSection.actor.hide(); } }, _onDeviceAdded: function(control, id, type){ let device = this._control["lookup_" + type + "_id"](id); let item = new PopupMenu.PopupMenuItem(device.description); item.activate = Lang.bind(this, function(){ this._control["change_" + type](device); }); let bin = new St.Bin({ x_align: St.Align.END, style_class: 'popup-inactive-menu-item' }); let label = new St.Label({ text: device.origin }); bin.add_actor(label); item.addActor(bin, { expand: true, span: -1, align: St.Align.END }); let selectItem = this["_select" + type[0].toUpperCase() + type.slice(1) + "DeviceItem"]; selectItem.menu.addMenuItem(item); //show the menu if we have more than two devices if(selectItem.menu.numMenuItems > 1) selectItem.actor.show(); this._devices.push({id: id, type: type, item: item}); }, _onDeviceRemoved: function(control, id, type){ for (let i = 0, l = this._devices.length; i < l; ++i){ if (this._devices[i].type === type && this._devices[i].id === id) { let device = this._devices[i]; if (device.item) device.item.destroy(); //hide submenu if showing them is unnecessary let selectItem = this["_select" + type[0].toUpperCase() + type.slice(1) + "DeviceItem"]; if(selectItem.menu.numMenuItems <= 1) selectItem.actor.hide(); this._devices.splice(i, 1); break; } } }, _onDeviceUpdate: function(control, id, type){ this["_read" + type[0].toUpperCase() + type.slice(1)](); for (let i = 0, l = this._devices.length; i < l; ++i) { if (this._devices[i].type === type) this._devices[i].item.setShowDot(id === this._devices[i].id); } }, _onStreamAdded: function(control, id){ let stream = this._control.lookup_stream_id(id); let appId = stream.application_id; if (stream.is_virtual || appId === "org.freedesktop.libcanberra") { //sort out unwanted streams return; } if (stream instanceof Cvc.MixerSinkInput) { //for sink inputs, add a menuitem to the application submenu let item = new StreamMenuSection(this, stream); this._outputApplicationsMenu.menu.addMenuItem(item); this._outputApplicationsMenu.actor.show(); this._streams.push({id: id, type: "SinkInput", item: item}); } else if (stream instanceof Cvc.MixerSourceOutput) { //for source outputs, only show the input section this._streams.push({id: id, type: "SourceOutput"}); if (this._recordingAppsNum++ === 0) this._inputSection.actor.show(); } }, _onStreamRemoved: function(control, id){ for (let i = 0, l = this._streams.length; i < l; ++i) { if(this._streams[i].id === id){ let stream = this._streams[i]; if(stream.item) stream.item.destroy(); //hide submenus or sections if showing them is unnecessary if (stream.type === "SinkInput") { if (this._outputApplicationsMenu.menu.numMenuItems === 0) this._outputApplicationsMenu.actor.hide(); } else if (stream.type === "SourceOutput") { if(--this._recordingAppsNum === 0) this._inputSection.actor.hide(); } this._streams.splice(i, 1); break; } } }, registerSystrayIcons: function() { for (let i = 0; i < players_with_seek_support.length; i++) { Main.systrayManager.registerRole(players_with_seek_support[i], this.metadata.uuid); } for (let i = 0; i < players_without_seek_support.length; i++) { Main.systrayManager.registerRole(players_without_seek_support[i], this.metadata.uuid); } }, unregisterSystrayIcons: function() { Main.systrayManager.unregisterId(this.metadata.uuid); } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/recent@cinnamon.org/0000775000175000017500000000000013215735076024406 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/recent@cinnamon.org/metadata.json0000664000175000017500000000026313215735076027062 0ustar fabiofabio{ "uuid": "recent@cinnamon.org", "name": "Recent documents", "description": "Access the documents you recently opened", "icon": "document-open-recent", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/recent@cinnamon.org/applet.js0000664000175000017500000002006013215735076026227 0ustar fabiofabioconst DocInfo = imports.misc.docInfo; const Gtk = imports.gi.Gtk; const Gio = imports.gi.Gio; const St = imports.gi.St; const PopupMenu = imports.ui.popupMenu; const Lang = imports.lang; const Applet = imports.ui.applet; const PRIVACY_SCHEMA = "org.cinnamon.desktop.privacy"; const REMEMBER_RECENT_KEY = "remember-recent-files"; const PANEL_EDIT_MODE_KEY = "panel-edit-mode"; function MyPopupMenuItem() { this._init.apply(this, arguments); } MyPopupMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(icon, text, uri, params) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params); this.box = new St.BoxLayout({ style_class: 'popup-combobox-item' }); this.icon = icon; this.uri = uri; if (this.icon) { this.box.add(this.icon); } this.label = new St.Label({ text: text }); this.box.add(this.label); this.addActor(this.box); } }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("document-open-recent"); this.set_applet_tooltip(_("Recent documents")); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.mainContainer = new St.BoxLayout({ vertical: true }); this.menu.addActor(this.mainContainer); this.recentsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, y_align: St.Align.START }); this.recentsScrollBox.set_auto_scrolling(true); this.mainContainer.add(this.recentsScrollBox); this.recentsBox = new St.BoxLayout({ vertical:true }); this.recentsScrollBox.add_actor(this.recentsBox); this.recentsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.RecentManager = new DocInfo.DocManager(); this.privacy_settings = new Gio.Settings( {schema_id: PRIVACY_SCHEMA} ); this._recentButtons = []; this._display(); this.recent_id = this.RecentManager.connect('changed', Lang.bind(this, this._refreshRecents)); this.settings_id = this.privacy_settings.connect("changed::" + REMEMBER_RECENT_KEY, Lang.bind(this, this._refreshRecents)); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._on_panel_edit_mode_changed)); } catch (e) { global.logError(e); } }, _on_panel_edit_mode_changed: function () { if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { this.actor.show(); } else { this.actor.visible = this._recentButtons.length > 0; } }, on_applet_removed_from_panel: function () { this.RecentManager.disconnect(this.recent_id); this.privacy_settings.disconnect(this.settings_id); }, on_applet_clicked: function(event) { this.menu.toggle(); }, _display: function() { this._refreshRecents(); }, _launchFile: function(a, b, c, docinfo) { docinfo.launch(); }, _clearAll: function() { let GtkRecent = new Gtk.RecentManager(); GtkRecent.purge_items(); }, destroy: function() { this.RecentManager.disconnectAll(); this.actor._delegate = null; this.menu.destroy(); this.actor.destroy(); this._recentButtons = null; this.emit('destroy'); }, _refreshRecents: function() { if (this.privacy_settings.get_boolean(REMEMBER_RECENT_KEY)) { let new_recents = []; let have_recents = false; if (this.RecentManager._infosByTimestamp.length > 0) { let id = 0; while (id < this.RecentManager._infosByTimestamp.length) { let uri = this.RecentManager._infosByTimestamp[id].uri; let new_button = null; new_button = this._recentButtons.find(button => ((button.uri) && (button.uri == uri))); if (new_button == undefined) { let icon = this.RecentManager._infosByTimestamp[id].createIcon(22); let menuItem = new MyPopupMenuItem(icon, this.RecentManager._infosByTimestamp[id].name, uri, {}); this.menu.addMenuItem(menuItem); menuItem.connect('activate', Lang.bind(this, this._launchFile, this.RecentManager._infosByTimestamp[id])); new_button = menuItem; } new_recents.push(new_button); id++; } let recent_clear_button = null; recent_clear_button = this._recentButtons.find(button => ((button.uri) && (button.uri == "clear"))); if (recent_clear_button == undefined) { let icon = new St.Icon({ icon_name: 'edit-clear', icon_type: St.IconType.SYMBOLIC, icon_size: 22 }); let menuItem = new MyPopupMenuItem(icon, _("Clear list"), "clear", {}); menuItem.connect('activate', Lang.bind(this, this._clearAll)); recent_clear_button = menuItem; } have_recents = true; new_recents.push(recent_clear_button); } else { let no_recents_button = null; no_recents_button = this._recentButtons.find(button => ((button.uri) && (button.uri == "no-recents"))); if (no_recents_button == undefined) { let menuItem = new MyPopupMenuItem(null, _("No recent documents"), "no-recents", {}); no_recents_button = menuItem; } new_recents.push(no_recents_button); } let to_remove = []; /* Remove no-longer-valid items */ for (let i = 0; i < this._recentButtons.length; i++) { let button = this._recentButtons[i]; if (button.uri == "no-recents" && have_recents) { to_remove.push(button); } else { if (new_recents.indexOf(button) == -1) { to_remove.push(button); } } } if (to_remove.length > 0) { for (let i in to_remove) { to_remove[i].destroy(); this._recentButtons.splice(this._recentButtons.indexOf(to_remove[i]), 1); } } to_remove = []; /* Now, add new actors, shuffle existing actors */ let placeholder = this.recentsBox.get_first_child(); for (let i = 0; i < new_recents.length; i++) { let actor = new_recents[i].actor; let parent = actor.get_parent(); if (parent != null) { parent.remove_child(actor); } if (actor != placeholder) { this.recentsBox.insert_child_above(actor, placeholder); } else { this.recentsBox.add_child(actor); } placeholder = actor; } this._recentButtons = new_recents; this.actor.show(); } else { for (let i = 0; i < this._recentButtons.length; i ++) { this._recentButtons[i].destroy(); } this._recentButtons = []; this.actor.hide(); } this._on_panel_edit_mode_changed(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/0000775000175000017500000000000013215735076024554 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/icons/0000775000175000017500000000000013215735076025667 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/icons/inhibit-symbolic.svg0000664000175000017500000001100413215735076031651 0ustar fabiofabio Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme Z Z ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/icons/inhibit-active-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/icons/inhibit-active-symbolic.s0000664000175000017500000001225713215735076032600 0ustar fabiofabio Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme Z Cinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/metadata.json0000664000175000017500000000034213215735076027226 0ustar fabiofabio{ "uuid": "inhibit@cinnamon.org", "name": "Inhibit Applet", "icon": "sleep", "description": "This applet is used to disable notifications and power management (including the screensaver and the session from going idle)" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/inhibit@cinnamon.org/applet.js0000664000175000017500000001374513215735076026411 0ustar fabiofabioconst Applet = imports.ui.applet; const Gio = imports.gi.Gio; const Lang = imports.lang; const St = imports.gi.St; const Tooltips = imports.ui.tooltips; const PopupMenu = imports.ui.popupMenu; const GnomeSession = imports.misc.gnomeSession; const INHIBIT_IDLE_FLAG = 8; const INHIBIT_SLEEP_FLAG = 4; function InhibitSwitch(applet) { this._init(applet); } InhibitSwitch.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(applet) { this._applet = applet; PopupMenu.PopupBaseMenuItem.prototype._init.call(this); this.label = new St.Label({ text: _("Power management") }); this._statusIcon = new St.Icon({ style_class: 'popup-menu-icon', icon_type: St.IconType.SYMBOLIC, icon_name: "dialog-warning-symbolic", reactive: true}); this._switch = new PopupMenu.Switch(true); this.addActor(this.label); this.addActor(this._statusIcon); this._statusBin = new St.Bin({ x_align: St.Align.END }); this.addActor(this._statusBin, { expand: true, span: -1, align: St.Align.END }); this._statusBin.child = this._switch.actor; this.actor.hide(); this.tooltip = new Tooltips.Tooltip(this._statusIcon, ""); this.sessionProxy = null; this.sessionCookie = null; this.sigAddedId = 0; this.sigRemovedId = 0; GnomeSession.SessionManager(Lang.bind(this, function(proxy, error) { if (error) return; this.sessionProxy = proxy; this.actor.show(); this.updateStatus(); this.propId = this.sessionProxy.connect("g-properties-changed", Lang.bind(this, this.updateStatus)); })); }, activate: function(event) { if (this._switch.actor.mapped) { this._switch.toggle(); } this.toggled(this._switch.state); PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event, true); }, updateStatus: function(o) { let current_state = this.sessionProxy.InhibitedActions; if (current_state & INHIBIT_IDLE_FLAG || current_state & INHIBIT_SLEEP_FLAG) { this._applet.set_applet_icon_symbolic_name('inhibit-active'); this._applet.set_applet_tooltip(_("Power management: inhibited")); } else { this._applet.set_applet_icon_symbolic_name('inhibit'); this._applet.set_applet_tooltip(_("Power management: active")); } if (current_state >= INHIBIT_SLEEP_FLAG && !this.sessionCookie) { this.tooltip.set_text(_("Power management is already inhibited by another program")); this._applet.set_applet_tooltip(_("Power management: inhibited by another program")); this._statusIcon.set_opacity(255); } else { this.tooltip.set_text(""); this._statusIcon.set_opacity(0); } }, toggled: function(active) { if (!active && !this.sessionCookie) { this.sessionProxy.InhibitRemote("inhibit@cinnamon.org", 0, "prevent idle functions like screen blanking and dimming", INHIBIT_IDLE_FLAG, Lang.bind(this, function(cookie) { this.sessionCookie = cookie; this.updateStatus(); })); } else if (active && this.sessionCookie) { this.sessionProxy.UninhibitRemote(this.sessionCookie); this.sessionCookie = null; this.updateStatus(); } }, kill: function() { if (!this.sessionProxy) return; if (this.sessionCookie) { this.sessionProxy.UninhibitRemote(this.sessionCookie); this.sessionCookie = null; } this.sessionProxy.disconnect(this.propId); } }; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this.metadata = metadata; this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.inhibitSwitch = new InhibitSwitch(this); this.menu.addMenuItem(this.inhibitSwitch); this.set_applet_icon_symbolic_name('inhibit'); this.set_applet_tooltip(_("Inhibit applet")); this.notif_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.notifications" }); this.notificationsSwitch = new PopupMenu.PopupSwitchMenuItem(_("Notifications"), this.notif_settings.get_boolean("display-notifications")); this.notif_settings.connect('changed::display-notifications', Lang.bind(this, function() { this.notificationsSwitch.setToggleState(this.notif_settings.get_boolean("display-notifications")); })); this.notificationsSwitch.connect('toggled', Lang.bind(this, function() { this.notif_settings.set_boolean("display-notifications", this.notificationsSwitch.state); })); this.menu.addMenuItem(this.notificationsSwitch); }, on_applet_clicked: function(event) { this.menu.toggle(); }, on_applet_removed_from_panel: function() { this.inhibitSwitch.kill(); } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/spacer@cinnamon.org/0000775000175000017500000000000013215735076024403 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/spacer@cinnamon.org/settings-schema.json0000664000175000017500000000035513215735076030377 0ustar fabiofabio{ "width": { "type": "scale", "default" : 10, "min" : 2, "max" : 400, "step" : 1, "description" : "Amount of space in pixels", "tooltip" : "Adjust this to increase or decrease the width of this spacer" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/spacer@cinnamon.org/metadata.json0000664000175000017500000000024213215735076027054 0ustar fabiofabio{ "uuid": "spacer@cinnamon.org", "name": "Spacer", "description": "Add some space between your other applets", "icon": "view-restore", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/spacer@cinnamon.org/applet.js0000664000175000017500000000306413215735076026231 0ustar fabiofabioconst Applet = imports.ui.applet; const St = imports.gi.St; const Settings = imports.ui.settings; function MyApplet(metadata, orientation, panelHeight, instance_id) { this._init(metadata, orientation, panelHeight, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panelHeight, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panelHeight, instance_id); this.actor.track_hover = false; this.bin = new St.Bin(); this.actor.add(this.bin); this.settings = new Settings.AppletSettings(this, "spacer@cinnamon.org", this.instance_id); this.settings.bind("width", "width", this.width_changed); this.orientation = orientation; this.width_changed(); }, on_orientation_changed: function(neworientation) { this.orientation = neworientation; if (this.bin) { this.bin.destroy(); this.bin = new St.Bin(); this.actor.add(this.bin); this.width_changed(); } }, width_changed: function() { if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) this.bin.width = this.width; else this.bin.height = this.width; }, on_applet_removed_from_panel: function() { this.settings.finalize(); } }; function main(metadata, orientation, panelHeight, instance_id) { let myApplet = new MyApplet(metadata, orientation, panelHeight, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/a11y@cinnamon.org/0000775000175000017500000000000013215735076023701 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/a11y@cinnamon.org/metadata.json0000664000175000017500000000024713215735076026357 0ustar fabiofabio{ "uuid": "a11y@cinnamon.org", "name": "Accessibility", "description": "Accessibility applet", "icon": "preferences-desktop-accessibility", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/a11y@cinnamon.org/applet.js0000664000175000017500000002177713215735076025542 0ustar fabiofabioconst PopupMenu = imports.ui.popupMenu; const Gio = imports.gi.Gio; const Lang = imports.lang; const Applet = imports.ui.applet; const Main = imports.ui.main; const Gdk = imports.gi.Gdk; const A11Y_SCHEMA = 'org.cinnamon.desktop.a11y.keyboard'; const KEY_STICKY_KEYS_ENABLED = 'stickykeys-enable'; const KEY_BOUNCE_KEYS_ENABLED = 'bouncekeys-enable'; const KEY_SLOW_KEYS_ENABLED = 'slowkeys-enable'; const KEY_MOUSE_KEYS_ENABLED = 'mousekeys-enable'; const APPLICATIONS_SCHEMA = 'org.cinnamon.desktop.a11y.applications'; const DPI_FACTOR_LARGE = 1.25; const DESKTOP_INTERFACE_SCHEMA = 'org.cinnamon.desktop.interface'; const KEY_GTK_THEME = 'gtk-theme'; const KEY_ICON_THEME = 'icon-theme'; const KEY_TEXT_SCALING_FACTOR = 'text-scaling-factor'; const HIGH_CONTRAST_THEME = 'HighContrast'; const Keymap = Gdk.Keymap.get_default(); function MyApplet(metadata, orientation, panel_height, applet_id) { this._init(metadata, orientation, panel_height, applet_id); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this.metadata = metadata; Main.systrayManager.registerRole("a11y", metadata.uuid); this.set_applet_icon_symbolic_name("preferences-desktop-accessibility"); this.set_applet_tooltip(_("Accessibility")); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); let highContrast = this._buildHCItem(); this.menu.addMenuItem(highContrast); let magnifier = this._buildItem(_("Zoom"), APPLICATIONS_SCHEMA, 'screen-magnifier-enabled'); this.menu.addMenuItem(magnifier); let textZoom = this._buildFontItem(); this.menu.addMenuItem(textZoom); let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA, 'screen-reader-enabled'); this.menu.addMenuItem(screenReader); let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA, 'screen-keyboard-enabled'); this.menu.addMenuItem(screenKeyboard); let stickyKeys = this._buildItem(_("Sticky Keys"), A11Y_SCHEMA, KEY_STICKY_KEYS_ENABLED); this.menu.addMenuItem(stickyKeys); let slowKeys = this._buildItem(_("Slow Keys"), A11Y_SCHEMA, KEY_SLOW_KEYS_ENABLED); this.menu.addMenuItem(slowKeys); let bounceKeys = this._buildItem(_("Bounce Keys"), A11Y_SCHEMA, KEY_BOUNCE_KEYS_ENABLED); this.menu.addMenuItem(bounceKeys); let mouseKeys = this._buildItem(_("Mouse Keys"), A11Y_SCHEMA, KEY_MOUSE_KEYS_ENABLED); this.menu.addMenuItem(mouseKeys); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addSettingsAction(_("Universal Access Settings"), 'universal-access'); this.a11y_settings = new Gio.Settings({ schema_id: A11Y_SCHEMA }); this._keyboardStateChangedId = Keymap.connect('state-changed', Lang.bind(this, this._handleStateChange)); this.set_show_label_in_vertical_panels(false); this.hide_applet_label(true); } catch (e) { global.logError(e); } }, _handleStateChange: function(actor, event) { if (this.a11y_settings.get_boolean(KEY_STICKY_KEYS_ENABLED)) { let state = Keymap.get_modifier_state(); let modifiers = []; if (state & Gdk.ModifierType.LOCK_MASK) modifiers.push('Lock'); if (state & Gdk.ModifierType.CONTROL_MASK) modifiers.push('Ctrl'); if (state & Gdk.ModifierType.MOD4_MASK) modifiers.push('Super'); if (state & Gdk.ModifierType.SUPER_MASK) modifiers.push('Super'); if (state & Gdk.ModifierType.META_MASK) modifiers.push('Meta'); if (state & Gdk.ModifierType.ALT_MASK) modifiers.push('Alt'); if (state & Gdk.ModifierType.MOD5_MASK) modifiers.push('Alt Gr'); if (state & Gdk.ModifierType.SHIFT_MASK) modifiers.push('Shift'); if (state & Gdk.ModifierType.MOD1_MASK) modifiers.push('Alt'); if (state & Gdk.ModifierType.MOD2_MASK) modifiers.push('Mod2'); if (state & Gdk.ModifierType.MOD3_MASK) modifiers.push('Mod3'); let keystring = modifiers.join('+'); this.set_applet_label(keystring); this.set_applet_tooltip(keystring); this._applet_tooltip.show(); } else { this.reset_tooltip(); } }, on_applet_clicked: function(event) { this.menu.toggle(); }, reset_tooltip: function () { this.set_applet_tooltip(_("Accessibility")); this._applet_tooltip.hide(); }, _buildItemExtended: function(string, initial_value, writable, on_set) { let widget = new PopupMenu.PopupSwitchMenuItem(string, initial_value); if (!writable) widget.actor.reactive = false; else widget.connect('toggled', function(item) { on_set(item.state); }); return widget; }, _buildItem: function(string, schema, key) { let settings = new Gio.Settings({ schema_id: schema }); let widget = this._buildItemExtended(string, settings.get_boolean(key), settings.is_writable(key), function(enabled) { return settings.set_boolean(key, enabled); }); settings.connect('changed::'+key, function() { widget.setToggleState(settings.get_boolean(key)); }); return widget; }, _buildHCItem: function() { let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); let gtkTheme = settings.get_string(KEY_GTK_THEME); let iconTheme = settings.get_string(KEY_ICON_THEME); let hasHC = (gtkTheme == HIGH_CONTRAST_THEME); let highContrast = this._buildItemExtended( _("High Contrast"), hasHC, settings.is_writable(KEY_GTK_THEME) && settings.is_writable(KEY_ICON_THEME), function (enabled) { if (enabled) { settings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME); settings.set_string(KEY_ICON_THEME, HIGH_CONTRAST_THEME); } else if(!hasHC) { settings.set_string(KEY_GTK_THEME, gtkTheme); settings.set_string(KEY_ICON_THEME, iconTheme); } else { settings.reset(KEY_GTK_THEME); settings.reset(KEY_ICON_THEME); } }); settings.connect('changed::' + KEY_GTK_THEME, function() { let value = settings.get_string(KEY_GTK_THEME); if (value == HIGH_CONTRAST_THEME) { highContrast.setToggleState(true); } else { highContrast.setToggleState(false); gtkTheme = value; } }); settings.connect('changed::' + KEY_ICON_THEME, function() { let value = settings.get_string(KEY_ICON_THEME); if (value != HIGH_CONTRAST_THEME) iconTheme = value; }); return highContrast; }, _buildFontItem: function() { let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); let initial_setting = (factor > 1.0); let widget = this._buildItemExtended(_("Large Text"), initial_setting, settings.is_writable(KEY_TEXT_SCALING_FACTOR), function (enabled) { if (enabled) settings.set_double(KEY_TEXT_SCALING_FACTOR, DPI_FACTOR_LARGE); else settings.reset(KEY_TEXT_SCALING_FACTOR); }); settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, function() { let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); let active = (factor > 1.0); widget.setToggleState(active); }); return widget; }, on_applet_removed_from_panel: function() { Main.systrayManager.unregisterRole("a11y", this.metadata.uuid); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/0000775000175000017500000000000013215735076024726 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/metadata.json0000664000175000017500000000021613215735076027400 0ustar fabiofabio{ "uuid": "keyboard@cinnamon.org", "name": "Keyboard", "description": "Keyboard layout", "icon": "input-keyboard", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js0000664000175000017500000002415313215735076026556 0ustar fabiofabioconst Applet = imports.ui.applet; const XApp = imports.gi.XApp; const Lang = imports.lang; const St = imports.gi.St; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const Util = imports.misc.util; const Mainloop = imports.mainloop; const Gio = imports.gi.Gio; const Cairo = imports.cairo; const PANEL_EDIT_MODE_KEY = "panel-edit-mode"; function EmblemedIcon() { this._init.apply(this, arguments); } EmblemedIcon.prototype = { _init: function(path, id, style_class) { this.path = path; this.id = id; this.actor = new St.DrawingArea({ style_class: style_class }); this.actor.connect("style-changed", Lang.bind(this, this._style_changed)); this.actor.connect("repaint", Lang.bind(this, this._repaint)); }, _style_changed: function(actor) { let icon_size = 0.5 + this.actor.get_theme_node().get_length("icon-size"); this.actor.natural_width = this.actor.natural_height = icon_size; }, _repaint: function(actor) { let cr = actor.get_context(); let [w, h] = actor.get_surface_size(); cr.save(); let surf = St.TextureCache.get_default().load_file_to_cairo_surface(this.path); let factor = w / surf.getWidth(); let true_width = surf.getWidth() * factor; let true_height = surf.getHeight() * factor; let y_offset = 0; let x_offset = 0; if (surf.getWidth() >= surf.getHeight()) { x_offset = 0; y_offset = ((h * (1 / factor)) - surf.getHeight()) / 2; } else { x_offset = ((w * (1 / factor)) - surf.getWidth()) / 2; y_offset = 0; } let true_x_offset = (w - true_width) / 2; let true_y_offset = (h - true_height) / 2; cr.scale(factor, factor); cr.setSourceSurface(surf, x_offset, y_offset); cr.getSource().setFilter(Cairo.Filter.BEST); cr.setOperator(Cairo.Operator.SOURCE); cr.paint(); cr.restore(); XApp.KbdLayoutController.render_cairo_subscript(cr, true_x_offset + (true_width / 2), true_y_offset + (true_height / 2), true_width / 2, true_height / 2, this.id); cr.$dispose(); }, /* Monkey patch St.Icon functions used in js/ui/applet.js IconApplet so we can use its _setStyle() function for figuring out how big we should be */ get_icon_type: function() { return St.IconType.FULLCOLOR; }, set_icon_size: function(size) { this.actor.width = this.actor.height = size; }, set_style_class_name: function(name) { return; } }; function LayoutMenuItem() { this._init.apply(this, arguments); } LayoutMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(config, id, indicator, long_name) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this); this._config = config; this._id = id; this.label = new St.Label({ text: long_name }); this.indicator = indicator; this.addActor(this.label); this.addActor(this.indicator); }, activate: function(event) { PopupMenu.PopupBaseMenuItem.prototype.activate.call(this); this._config.set_current_group(this._id); } }; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this.metadata = metadata; Main.systrayManager.registerRole("keyboard", metadata.uuid); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.actor.add_style_class_name('panel-status-button'); this._layoutItems = [ ]; this.show_flags = false; this.use_upper = false; this.use_variants = false; this.desktop_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.interface" }); this.desktop_settings.connect("changed::keyboard-layout-show-flags", Lang.bind(this, this._syncConfig)); this.desktop_settings.connect("changed::keyboard-layout-use-upper", Lang.bind(this, this._syncConfig)); this.desktop_settings.connect("changed::keyboard-layout-prefer-variant-names", Lang.bind(this, this._syncConfig)); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._onPanelEditModeChanged)); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() { Main.overview.hide(); Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]); })); this.menu.addAction(_("Show Character Table"), Lang.bind(this, function() { Main.overview.hide(); Util.spawn(['gucharmap']); })); this.menu.addSettingsAction(_("Keyboard Settings"), 'keyboard'); } catch (e) { global.logError(e); } }, _onPanelEditModeChanged: function() { if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { if (!this.actor.visible) { this.set_applet_icon_symbolic_name("input-keyboard"); this.actor.show(); } } else { this._syncConfig(); } }, on_applet_added_to_panel: function() { this._config = new XApp.KbdLayoutController(); if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { this._syncConfig(); this._onPanelEditModeChanged(); } else { this._syncConfig(); } this._config.connect('layout-changed', Lang.bind(this, this._syncGroup)); this._config.connect('config-changed', Lang.bind(this, this._syncConfig)); }, on_applet_clicked: function(event) { this.menu.toggle(); }, _syncConfig: function() { for (let i = 0; i < this._layoutItems.length; i++) this._layoutItems[i].destroy(); this._selectedLayout = null; this._layoutItems = [ ]; if (!this._config.get_enabled()) { this.menu.close(); this.actor.hide(); return; } this.show_flags = this.desktop_settings.get_boolean("keyboard-layout-show-flags"); this.use_upper = this.desktop_settings.get_boolean("keyboard-layout-use-upper"); this.use_variants = this.desktop_settings.get_boolean("keyboard-layout-prefer-variant-names"); this.actor.show(); let groups = this._config.get_all_names(); for (let i = 0; i < groups.length; i++) { let handled = false; let actor = null; if (this.show_flags) { let name = this._config.get_icon_name_for_group(i); let file = Gio.file_new_for_path("/usr/share/iso-flag-png/" + name + ".png"); if (file.query_exists(null)) { actor = new EmblemedIcon(file.get_path(), this._config.get_flag_id_for_group(i), "popup-menu-icon").actor; handled = true; } } if (!handled) { let name; if (this.use_variants) { name = this._config.get_variant_label_for_group(i); } else { name = this._config.get_short_group_label_for_group(i); } name = this.use_upper ? name.toUpperCase() : name; actor = new St.Label({ text: name }); } let item = new LayoutMenuItem(this._config, i, actor, groups[i]); this._layoutItems.push(item); this.menu.addMenuItem(item, i); } Mainloop.idle_add(Lang.bind(this, this._syncGroup)); }, _syncGroup: function() { let selected = this._config.get_current_group(); if (this._selectedLayout) { this._selectedLayout.setShowDot(false); this._selectedLayout = null; } let item = this._layoutItems[selected]; item.setShowDot(true); this._selectedLayout = item; this.set_applet_tooltip(this._config.get_current_name()); let handled = false; if (this.show_flags) { let name = this._config.get_current_icon_name(); let file = Gio.file_new_for_path("/usr/share/iso-flag-png/" + name + ".png"); if (file.query_exists(null)) { this._applet_icon = new EmblemedIcon(file.get_path(), this._config.get_current_flag_id(), "applet-icon"); this._applet_icon_box.set_child(this._applet_icon.actor); this._setStyle(); this.set_applet_label(""); handled = true; } } if (!handled) { let name; if (this.use_variants) { name = this._config.get_current_variant_label(); } else { name = this._config.get_current_short_group_label(); } name = this.use_upper ? name.toUpperCase() : name; this.set_applet_label(name); this.hide_applet_icon(); } }, on_applet_removed_from_panel: function() { Main.systrayManager.unregisterRole("keyboard", this.metadata.uuid); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/systray@cinnamon.org/0000775000175000017500000000000013215735076024644 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/systray@cinnamon.org/metadata.json0000664000175000017500000000023713215735076027321 0ustar fabiofabio{ "uuid": "systray@cinnamon.org", "name": "System Tray", "icon": "applications-system", "description": "An applet which hosts all the system tray icons" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/systray@cinnamon.org/applet.js0000664000175000017500000003556613215735076026506 0ustar fabiofabioconst Lang = imports.lang; const St = imports.gi.St; const Clutter = imports.gi.Clutter; const Applet = imports.ui.applet; const PopupMenu = imports.ui.popupMenu; const Main = imports.ui.main; const Mainloop = imports.mainloop; const SignalManager = imports.misc.signalManager; const ICON_SCALE_FACTOR = 0.8; // for custom panel heights, 20 (default icon size) / 25 (default panel height) const DEFAULT_ICON_SIZE = 20; // Override the factory and create an AppletPopupMenu instead of a PopupMenu function IndicatorMenuFactory() { this._init.apply(this, arguments); } IndicatorMenuFactory.prototype = { __proto__: PopupMenu.PopupMenuFactory.prototype, _init: function() { PopupMenu.PopupMenuFactory.prototype._init.call(this); }, _createShellItem: function(factoryItem, launcher, orientation) { // Decide whether it's a submenu or not let shellItem = null; let item_type = factoryItem.getFactoryType(); if (item_type == PopupMenu.FactoryClassTypes.RootMenuClass) shellItem = new Applet.AppletPopupMenu(launcher, orientation); if (item_type == PopupMenu.FactoryClassTypes.SubMenuMenuItemClass) shellItem = new PopupMenu.PopupSubMenuMenuItem("FIXME"); else if (item_type == PopupMenu.FactoryClassTypes.MenuSectionMenuItemClass) shellItem = new PopupMenu.PopupMenuSection(); else if (item_type == PopupMenu.FactoryClassTypes.SeparatorMenuItemClass) shellItem = new PopupMenu.PopupSeparatorMenuItem(''); else if (item_type == PopupMenu.FactoryClassTypes.MenuItemClass) shellItem = new PopupMenu.PopupIndicatorMenuItem("FIXME"); return shellItem; } }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.Applet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.Applet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.actor.remove_style_class_name('applet-box'); this.actor.set_style_class_name('systray'); this.actor.set_important(true); // ensure we get class details from the default theme if not present this._signalManager = new SignalManager.SignalManager(null); let manager; this.orientation = orientation; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) { manager = new Clutter.BoxLayout( { spacing: 2, orientation: Clutter.Orientation.HORIZONTAL }); } else { manager = new Clutter.BoxLayout( { spacing: 2, orientation: Clutter.Orientation.VERTICAL }); } this.manager = manager; this.manager_container = new Clutter.Actor( { layout_manager: manager } ); this.actor.add_actor (this.manager_container); this.manager_container.show(); this._statusItems = []; this._shellIndicators = {}; this.menuFactory = new IndicatorMenuFactory(); this.menuManager = new PopupMenu.PopupMenuManager(this); this._signalAdded = 0; this._signalRemoved = 0; }, _addIndicatorSupport: function() { let manager = Main.indicatorManager; // Blacklist some of the icons // quassel: The proper icon in Quassel is "QuasselIRC", // this is a fallback icon which Quassel launches when it fails to detect // our indicator support (i.e. when Cinnamon is restarted for instance) // The problem is.. Quassel doesn't kill that icon when it creates QuasselIRC again.. manager.insertInBlackList("quassel"); let currentIndicators = manager.getIndicatorIds(); for (let pos in currentIndicators) { if (!manager.isInBlackList(currentIndicators[pos])) { let appIndicator = manager.getIndicatorById(currentIndicators[pos]); this._onIndicatorAdded(manager, appIndicator); } } if (this._signalAdded == 0) this._signalAdded = manager.connect('indicator-added', Lang.bind(this, this._onIndicatorAdded)); if (this._signalRemoved == 0) this._signalRemoved = manager.connect('indicator-removed', Lang.bind(this, this._onIndicatorRemoved)); }, _removeIndicatorSupport: function() { if (this.signalAdded) { Main.indicatorManager.disconnect(this.signalAdded); this.signalAdded = 0; } if (this.signalRemoved) { Main.indicatorManager.disconnect(this.signalRemoved); this.signalRemoved = 0; } for (let id in this._shellIndicators) { this._shellIndicators[id].destroy(); } this._shellIndicators = {}; }, _onIndicatorAdded: function(manager, appIndicator) { if (!(appIndicator.id in this._shellIndicators)) { let size = null; size = this._getIconSize(this._panelHeight/global.ui_scale); let indicatorActor = appIndicator.getActor(size); indicatorActor._applet = this; this._shellIndicators[appIndicator.id] = indicatorActor; this._signalManager.connect(indicatorActor.actor, 'destroy', this._onIndicatorIconDestroy, this); this._signalManager.connect(indicatorActor.actor, 'enter-event', this._onEnterEvent, this); this._signalManager.connect(indicatorActor.actor, 'leave-event', this._onLeaveEvent, this); this.manager_container.add_actor(indicatorActor.actor); appIndicator.createMenuClientAsync(Lang.bind(this, function(client) { if (client != null) { let newMenu = client.getShellMenu(); if (!newMenu) { newMenu = this.menuFactory.buildShellMenu(client, indicatorActor, this.orientation); this.menuManager.addMenu(newMenu); } indicatorActor.setMenu(newMenu); } })); } }, _onEnterEvent: function(actor, event) { this.set_applet_tooltip(actor._delegate.getToolTip()); }, _onLeaveEvent: function(actor, event) { this.set_applet_tooltip(""); }, _onIndicatorIconDestroy: function(actor) { for (let id in this._shellIndicators) { if (this._shellIndicators[id].actor == actor) { delete this._shellIndicators[id]; break; } } }, _getIconSize: function(ht) { let size; let disp_size = ht * ICON_SCALE_FACTOR; // hidpi with largest panel, gets up to 80 if (disp_size < 22) { size = 16; } else if (disp_size < 32) { size = 22; } else if (disp_size < 48) { size = 32; } else if (disp_size < 64) { size = 48; } else if (disp_size < 96) { size = 64; } else if (disp_size < 128) { size = 96; } else { size = 48; } return size; }, _onIndicatorRemoved: function(manager, appIndicator) { if (appIndicator.id in this._shellIndicators) { let indicatorActor = this._shellIndicators[appIndicator.id]; delete this._shellIndicators[appIndicator.id]; indicatorActor.destroy(); } }, on_applet_clicked: function(event) { }, on_orientation_changed: function(neworientation) { if (neworientation == St.Side.TOP || neworientation == St.Side.BOTTOM) { this.manager.set_vertical(false); } else { this.manager.set_vertical(true); } }, on_applet_removed_from_panel: function () { this._signalManager.disconnectAllSignals(); this._removeIndicatorSupport(); }, on_applet_added_to_panel: function() { Main.statusIconDispatcher.start(this.actor.get_parent().get_parent()); this._signalManager.connect(Main.statusIconDispatcher, 'status-icon-added', this._onTrayIconAdded, this); this._signalManager.connect(Main.statusIconDispatcher, 'status-icon-removed', this._onTrayIconRemoved, this); this._signalManager.connect(Main.statusIconDispatcher, 'before-redisplay', this._onBeforeRedisplay, this); this._signalManager.connect(Main.systrayManager, "changed", Main.statusIconDispatcher.redisplay, Main.statusIconDispatcher); this._addIndicatorSupport(); }, on_panel_height_changed: function() { Main.statusIconDispatcher.redisplay(); let size = null; size = this._getIconSize(this._panelHeight/global.ui_scale); for (let id in this._shellIndicators) { let indicator = Main.indicatorManager.getIndicatorById(id); if (indicator) { this._shellIndicators[id].setSize(size); } } }, _onBeforeRedisplay: function() { // Mark all icons as obsolete // There might still be pending delayed operations to insert/resize of them // And that would crash Cinnamon for (var i = 0; i < this._statusItems.length; i++) { this._statusItems[i].obsolete = true; } this._statusItems = []; let children = this.manager_container.get_children().filter(function(child) { // We are only interested in the status icons and apparently we can not ask for // child instanceof CinnamonTrayIcon. return (child.toString().indexOf("CinnamonTrayIcon") != -1); }); for (let i = 0; i < children.length; i++) { children[i].destroy(); } }, _onTrayIconAdded: function(o, icon, role) { try { let hiddenIcons = Main.systrayManager.getRoles(); if (hiddenIcons.indexOf(role) != -1 ) { // We've got an applet for that global.log("Hiding systray: " + role); return; } global.log("Adding systray: " + role + " (" + icon.get_width() + "x" + icon.get_height() + "px)"); if (icon.get_parent()) icon.get_parent().remove_child(icon); icon.obsolete = false; this._statusItems.push(icon); if (["pidgin"].indexOf(role) != -1) { // Delay pidgin insertion by 10 seconds // Pidgin is very weird.. it starts with a small icon // Then replaces that icon with a bigger one when the connection is established // Pidgin can be fixed by inserting or resizing after a delay // The delay is big because resizing/inserting too early // makes pidgin invisible (in absence of disk cache).. even if we resize/insert again later this._insertStatusItemLater(role, icon, -1, 10000); } else if (["shutter", "filezilla", "dropbox", "thunderbird", "unknown", "blueberry-tray.py", "mintupdate.py"].indexOf(role) != -1) { // Delay insertion by 1 second // This fixes an invisible icon in the absence of disk cache for : shutter // filezilla, dropbox, thunderbird, blueberry, mintupdate are known to show up in the wrong size or position, this should fix them as well // Note: as of Oct 2015, the dropbox systray is calling itself "unknown" this._insertStatusItemLater(role, icon, -1, 1000); } else { // Delay all other apps by 1 second... // For many of them, we don't need to do that, // It's a small delay though and that fixes most buggy apps // And we're far from having an exhaustive list of them.. this._insertStatusItemLater(role, icon, -1, 1000); } } catch (e) { global.logError(e); } }, _insertStatusItemLater: function(role, icon, position, delay) { // Inserts an icon in the systray after a delay (useful for buggy icons) // Delaying the insertion of pidgin by 10 seconds for instance is known to fix it on empty disk cache let timerId = Mainloop.timeout_add(delay, Lang.bind(this, function() { this._insertStatusItem(role, icon, position); Mainloop.source_remove(timerId); })); }, _onTrayIconRemoved: function(o, icon) { icon.obsolete = true; for (var i = 0; i < this._statusItems.length; i++) { if (this._statusItems[i] == icon) { this._statusItems.splice(i, 1); } } if (icon.get_parent() == this.manager_container) { this.manager_container.remove_child(icon); } icon.destroy(); }, _insertStatusItem: function(role, icon, position) { if (icon.obsolete == true) { return; } let children = this.manager_container.get_children().filter(function(child) { // We are only interested in the status icons and apparently we can not ask for // child instanceof CinnamonTrayIcon. return (child.toString().indexOf("CinnamonTrayIcon") != -1); }); let i; for (i = children.length - 1; i >= 0; i--) { let rolePosition = children[i]._rolePosition; if (position > rolePosition) { this.manager_container.insert_child_at_index(icon, i + 1); break; } } if (i == -1) { // If we didn't find a position, we must be first this.manager_container.insert_child_at_index(icon, 0); } icon._rolePosition = position; if (this._scaleMode) { let timerId = Mainloop.timeout_add(500, Lang.bind(this, function() { this._resizeStatusItem(role, icon); Mainloop.source_remove(timerId); })); } else { icon.set_pivot_point(0.5, 0.5); icon.set_scale((DEFAULT_ICON_SIZE * global.ui_scale) / icon.width, (DEFAULT_ICON_SIZE * global.ui_scale) / icon.height); } }, _resizeStatusItem: function(role, icon) { if (icon.obsolete == true) { return; } if (["shutter", "filezilla"].indexOf(role) != -1) { global.log("Not resizing " + role + " as it's known to be buggy (" + icon.get_width() + "x" + icon.get_height() + "px)"); } else { let size = this._getIconSize(this._panelHeight); icon.set_size(size, size); global.log("Resized " + role + " with normalized size (" + icon.get_width() + "x" + icon.get_height() + "px)"); //Note: dropbox doesn't scale, even though we resize it... } }, }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/0000775000175000017500000000000013215735076026703 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/icons/0000775000175000017500000000000013215735076030016 5ustar fabiofabio././@LongLink0000644000000000000000000000016600000000000011606 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/icons/windows-quick-list-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/icons/windows-quick-0000664000175000017500000000036513215735076032626 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/metadata.json0000664000175000017500000000026413215735076031360 0ustar fabiofabio{ "uuid": "windows-quick-list@cinnamon.org", "name": "Windows Quick List", "description": "Quickly access windows from all workspaces", "icon": "view-list", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/windows-quick-list@cinnamon.org/applet.js0000664000175000017500000001354013215735076030531 0ustar fabiofabioconst Applet = imports.ui.applet; const Cinnamon = imports.gi.Cinnamon; const Lang = imports.lang; const PopupMenu = imports.ui.popupMenu; const St = imports.gi.St; const Main = imports.ui.main; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("windows-quick-list"); this.set_applet_tooltip(_("All windows")); this._menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menuManager.addMenu(this._menu); this.subMenuItemWrapper = new PopupMenu.PopupSubMenuMenuItem(null); this.subMenuItemWrapper.actor.set_style_class_name(''); this.subMenuItemWrapper.menu.actor.set_style_class_name(''); this.menu = this.subMenuItemWrapper.menu; this._menu.addMenuItem(this.subMenuItemWrapper); } catch (e) { global.logError(e); } }, updateMenu: function() { this.menu.removeAll(); let empty_menu = true; try { let tracker = Cinnamon.WindowTracker.get_default(); for ( let wks=0; wks0) { this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); } if(global.screen.n_workspaces>1) { let item = new PopupMenu.PopupMenuItem(workspace_name); item.actor.reactive = false; item.actor.can_focus = false; item.label.add_style_class_name('popup-subtitle-menu-item'); if(wks == global.screen.get_active_workspace().index()) { item.setShowDot(true); } this.menu.addMenuItem(item); empty_menu = false; } for ( let i = 0; i < windows.length; ++i ) { let metaWindow = windows[i]; let item = new PopupMenu.PopupMenuItem(windows[i].get_title()); item.connect('activate', Lang.bind(this, function() { this.activateWindow(metaWorkspace, metaWindow); } )); item._window = windows[i]; let app = tracker.get_window_app(item._window); item._icon = app.create_icon_texture(24); item.addActor(item._icon, { align: St.Align.END }); this.menu.addMenuItem(item); empty_menu = false; } } } } catch(e) { global.logError(e); } if (empty_menu) { let item = new PopupMenu.PopupMenuItem(_("No open windows")); item.actor.reactive = false; item.actor.can_focus = false; item.label.add_style_class_name('popup-subtitle-menu-item'); this.menu.addMenuItem(item); } }, activateWindow: function(metaWorkspace, metaWindow) { if (this._menu.isOpen) { this._menu.toggle(); } this.menu.toggle(); if(!metaWindow.is_on_all_workspaces()) { metaWorkspace.activate(global.get_current_time()); } metaWindow.unminimize(); metaWindow.activate(global.get_current_time()); }, on_applet_clicked: function(event) { this.updateMenu(); if (!this._menu.isOpen) { this._menu.toggle(); } this.menu.toggle(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/0000775000175000017500000000000013215735076026752 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/settings-schema.json0000664000175000017500000000041613215735076032744 0ustar fabiofabio{ "display_type": { "type": "combobox", "description": "Type of display", "default": "visual", "options" : { "A visual representation of the workspaces": "visual", "Simple buttons": "buttons" } } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/metadata.json0000664000175000017500000000026513215735076031430 0ustar fabiofabio{ "uuid": "workspace-switcher@cinnamon.org", "name": "Workspace switcher", "description": "Select the workspace from the panel", "icon": "cs-workspaces", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/applet.js0000664000175000017500000004023413215735076030600 0ustar fabiofabioconst St = imports.gi.St; const Clutter = imports.gi.Clutter; const Lang = imports.lang; const Applet = imports.ui.applet; const Main = imports.ui.main; const Meta = imports.gi.Meta; const PopupMenu = imports.ui.popupMenu; const SignalManager = imports.misc.signalManager; const Tooltips = imports.ui.tooltips; const Settings = imports.ui.settings; const ModalDialog = imports.ui.modalDialog; const MIN_SWITCH_INTERVAL_MS = 220; function WorkspaceButton(index, applet) { this._init(index, applet); } WorkspaceButton.prototype = { _init : function(index, applet) { this.index = index; this.applet = applet; this.workspace = global.screen.get_workspace_by_index(this.index); this.workspace_name = Main.getWorkspaceName(index); this.actor = null; // defined in subclass this.ws_signals = new SignalManager.SignalManager(null); this.ws_signals.connect(this.workspace, "window-added", this.update, this); this.ws_signals.connect(this.workspace, "window-removed", this.update, this); }, show : function() { this.actor.connect('button-release-event', Lang.bind(this, this.onClicked)); this._tooltip = new Tooltips.PanelItemTooltip(this, this.workspace_name, this.applet.orientation); }, onClicked: function(actor, event) { if (event.get_button() == 1) { Main.wm.moveToWorkspace(this.workspace); } }, update: function() { // defined in subclass }, destroy: function() { this.ws_signals.disconnectAllSignals(); this._tooltip.destroy(); this.actor.destroy(); } }; function WorkspaceGraph(index, applet) { this._init(index, applet); } WorkspaceGraph.prototype = { __proto__: WorkspaceButton.prototype, _init: function(index, applet) { WorkspaceButton.prototype._init.call(this, index, applet); this.actor = new St.Bin({ reactive: true, style_class: 'workspace', y_fill: true, important: true }); this.graphArea = new St.DrawingArea({ style_class: 'windows', important: true }); this.actor.child = this.graphArea; this.panelApplet = applet; this.workspace_size = new Meta.Rectangle(); this.workspace.get_work_area_all_monitors(this.workspace_size); this.sizeRatio = this.workspace_size.width / this.workspace_size.height; let height = applet._panelHeight - 6; if (applet.orientation == St.Side.LEFT || applet.orientation == St.Side.RIGHT) height = height / this.sizeRatio; this.actor.set_size(this.sizeRatio * height, height); this.graphArea.set_size(this.sizeRatio * height, height); this.graphArea.connect('repaint', Lang.bind(this, this.onRepaint)); if (index == global.screen.get_active_workspace_index()) { this.actor.add_style_pseudo_class('active'); } }, scale: function (windows_rect, workspace_rect, area_width, area_height) { let scaled_rect = new Meta.Rectangle(); let x_ratio = area_width / workspace_rect.width; let y_ratio = area_height / workspace_rect.height; scaled_rect.x = windows_rect.x * x_ratio; scaled_rect.y = windows_rect.y * y_ratio; scaled_rect.width = windows_rect.width * x_ratio; scaled_rect.height = windows_rect.height * y_ratio; return scaled_rect; }, sortWindowsByUserTime: function (win1, win2) { let t1 = win1.get_user_time(); let t2 = win2.get_user_time(); return (t2 < t1) ? 1 : -1; }, onRepaint: function(area) { try { let graphThemeNode = this.graphArea.get_theme_node(); let workspaceThemeNode = this.panelApplet.actor.get_theme_node(); let height = this.panelApplet._panelHeight - workspaceThemeNode.get_vertical_padding(); let borderWidth = workspaceThemeNode.get_border_width(St.Side.TOP) + workspaceThemeNode.get_border_width(St.Side.BOTTOM); this.graphArea.set_size(this.sizeRatio * height, height - borderWidth); let cr = area.get_context(); let [area_width, area_height] = area.get_surface_size(); // construct a list with all windows let windows = this.workspace.list_windows(); windows = windows.filter( Main.isInteresting ); windows = windows.filter( function(w) { return !w.is_skip_taskbar() && !w.minimized; }); windows.sort(this.sortWindowsByUserTime); if (windows.length) { let windowBackgroundColor; let windowBorderColor; for (let i = 0; i < windows.length; ++i) { let metaWindow = windows[i]; let scaled_rect = this.scale(metaWindow.get_outer_rect(), this.workspace_size, area_width, area_height); cr.setLineWidth(1); if (metaWindow.has_focus()) { windowBorderColor = graphThemeNode.get_color('-active-window-border'); Clutter.cairo_set_source_color(cr, windowBorderColor); } else { windowBorderColor = graphThemeNode.get_color('-inactive-window-border'); Clutter.cairo_set_source_color(cr, windowBorderColor); } cr.rectangle(scaled_rect.x, scaled_rect.y, scaled_rect.width, scaled_rect.height); cr.strokePreserve(); if (metaWindow.has_focus()) { windowBackgroundColor = graphThemeNode.get_color('-active-window-background'); Clutter.cairo_set_source_color(cr, windowBackgroundColor); } else { windowBackgroundColor = graphThemeNode.get_color('-inactive-window-background'); Clutter.cairo_set_source_color(cr, windowBackgroundColor); } cr.fill(); } } cr.$dispose(); } catch(e) { global.logError(e); } }, update: function() { this.graphArea.queue_repaint(); } }; function SimpleButton(index, applet) { this._init(index, applet); } SimpleButton.prototype = { __proto__: WorkspaceButton.prototype, _init : function(index, applet) { WorkspaceButton.prototype._init.call(this, index, applet); this.actor = new St.Button({ name: 'workspaceButton', style_class: 'workspace-button', reactive: true }); if (index == global.screen.get_active_workspace_index()) { this.actor.add_style_pseudo_class('outlined'); } if (applet.orientation == St.Side.TOP || applet.orientation == St.Side.BOTTOM) { this.actor.set_height(applet._panelHeight); } else { this.actor.set_height(0.6 * applet._panelHeight); // factors are completely empirical this.actor.set_width(0.9 * applet._panelHeight); } if (applet.orientation == St.Side.LEFT || applet.orientation == St.Side.RIGHT) this.actor.add_style_class_name('vertical'); let label = new St.Label({ text: (index + 1).toString() }); this.actor.set_child(label); }, update: function() { } }; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.Applet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.Applet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this.orientation = orientation; this.panel_height = panel_height; this.signals = new SignalManager.SignalManager(null); this.buttons = []; this._last_switch = 0; this._last_switch_direction = 0; let manager; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) { manager = new Clutter.BoxLayout({ spacing: 2 * global.ui_scale, homogeneous: true, orientation: Clutter.Orientation.HORIZONTAL }); } else { manager = new Clutter.BoxLayout({ spacing: 2 * global.ui_scale, homogeneous: true, orientation: Clutter.Orientation.VERTICAL }); } this.manager = manager; this.manager_container = new Clutter.Actor({ layout_manager: manager }); this.actor.add_actor (this.manager_container); this.manager_container.show(); this._focusWindow = 0; if (global.display.focus_window) this._focusWindow = global.display.focus_window.get_compositor_private(); this.settings = new Settings.AppletSettings(this, metadata.uuid, instance_id); this.settings.bind("display_type", "display_type", this._createButtons); this.actor.connect('scroll-event', this.hook.bind(this)); this._createButtons(); global.screen.connect('notify::n-workspaces', Lang.bind(this, this.onNumberOfWorkspacesChanged)); global.window_manager.connect('switch-workspace', Lang.bind(this, this._createButtons)); this.on_panel_edit_mode_changed(); global.settings.connect('changed::panel-edit-mode', Lang.bind(this, this.on_panel_edit_mode_changed)); let expoMenuItem = new PopupMenu.PopupIconMenuItem(_("Manage workspaces (Expo)"), "view-grid-symbolic", St.IconType.SYMBOLIC); expoMenuItem.connect('activate', Lang.bind(this, function() { if (!Main.expo.animationInProgress) Main.expo.toggle(); })); this._applet_context_menu.addMenuItem(expoMenuItem); let addWorkspaceMenuItem = new PopupMenu.PopupIconMenuItem (_("Add a new workspace"), "list-add", St.IconType.SYMBOLIC); addWorkspaceMenuItem.connect('activate', Lang.bind(this, function() { Main._addWorkspace(); })); this._applet_context_menu.addMenuItem(addWorkspaceMenuItem); this.removeWorkspaceMenuItem = new PopupMenu.PopupIconMenuItem (_("Remove the current workspace"), "list-remove", St.IconType.SYMBOLIC); this.removeWorkspaceMenuItem.connect('activate', Lang.bind(this, function() { this.removeWorkspace(); })); this._applet_context_menu.addMenuItem(this.removeWorkspaceMenuItem); this.removeWorkspaceMenuItem.setSensitive(global.screen.n_workspaces > 1); } catch (e) { global.logError(e); } }, onNumberOfWorkspacesChanged: function() { this.removeWorkspaceMenuItem.setSensitive(global.screen.n_workspaces > 1); this._createButtons(); }, removeWorkspace : function (){ if (global.screen.n_workspaces <= 1) { return; } this.workspace_index = global.screen.get_active_workspace_index(); let removeAction = Lang.bind(this, function() { Main._removeWorkspace(global.screen.get_active_workspace()); }); if (!Main.hasDefaultWorkspaceName(this.workspace_index)) { let prompt = _("Are you sure you want to remove workspace \"%s\"?\n\n").format( Main.getWorkspaceName(this.workspace_index)); let confirm = new ModalDialog.ConfirmDialog(prompt, removeAction); confirm.open(); } else { removeAction(); } }, on_panel_edit_mode_changed: function() { let reactive = !global.settings.get_boolean('panel-edit-mode'); for (let i = 0; i < this.buttons.length; ++i) { this.buttons[i].reactive = reactive; } }, on_orientation_changed: function(neworientation) { this.orientation = neworientation; if (this.orientation == St.Side.TOP || this.orientation == St.Side.BOTTOM) this.manager.set_vertical(false); else this.manager.set_vertical(true); this._createButtons(); }, on_panel_height_changed: function() { this._createButtons(); }, hook: function(actor, event) { let now = (new Date()).getTime(); let direction = event.get_scroll_direction(); // Avoid fast scroll directions if(direction != 0 && direction != 1) return; // Do the switch only after a ellapsed time to avoid fast // consecutive switches on sensible hardware, like touchpads if ((now - this._last_switch) > MIN_SWITCH_INTERVAL_MS || direction !== this._last_switch_direction) { if (direction == 0) Main.wm.actionMoveWorkspaceLeft(); else if (direction == 1) Main.wm.actionMoveWorkspaceRight(); this._last_switch = now; this._last_switch_direction = direction; } }, _createButtons: function() { for (let i = 0; i < this.buttons.length; ++i) { this.buttons[i].destroy(); } let suppress_graph = false; // suppress the graph and replace by buttons if size ratio // would be unworkable in a vertical panel if (this.orientation == St.Side.LEFT || this.orientation == St.Side.RIGHT) { let workspace_size = new Meta.Rectangle(); global.screen.get_workspace_by_index(0).get_work_area_all_monitors(workspace_size); let sizeRatio = workspace_size.width / workspace_size.height; if (sizeRatio >= 2.35) { // completely empirical, other than the widest // ratio single screen I know is 21*9 = 2.33 suppress_graph = true; } } if (this.display_type == "visual" && !suppress_graph) this.actor.set_style_class_name('workspace-graph'); else this.actor.set_style_class_name('workspace-switcher'); this.actor.set_important(true); this.buttons = []; for (let i = 0; i < global.screen.n_workspaces; ++i) { if (this.display_type == "visual" && !suppress_graph) this.buttons[i] = new WorkspaceGraph(i, this); else this.buttons[i] = new SimpleButton(i, this); this.manager_container.add_actor(this.buttons[i].actor); this.buttons[i].show(); } this.signals.disconnectAllSignals(); if (this.display_type == "visual" && !suppress_graph) { // In visual mode, keep track of window events to represent them this.signals.connect(global.display, "notify::focus-window", this._onFocusChanged, this); this._onFocusChanged(); } }, _onFocusChanged: function() { if (global.display.focus_window && this._focusWindow == global.display.focus_window.get_compositor_private()) return; this.signals.disconnect("position-changed"); this.signals.disconnect("size-changed"); if (!global.display.focus_window) return; this._focusWindow = global.display.focus_window.get_compositor_private(); this.signals.connect(this._focusWindow, "position-changed", Lang.bind(this, this._onPositionChanged), this); this.signals.connect(this._focusWindow, "size-changed", Lang.bind(this, this._onPositionChanged), this); this._onPositionChanged(); }, _onPositionChanged: function() { let button = this.buttons[global.screen.get_active_workspace_index()]; button.update(); }, on_applet_removed_from_panel: function() { this.signals.disconnectAllSignals(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/0000775000175000017500000000000013215735076025777 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/settings-schema.json0000664000175000017500000000114713215735076031773 0ustar fabiofabio{ "section1": { "type": "section", "description": "Behavior" }, "ignoreTransientNotifications": { "type": "switch", "default": true, "description": "Ignore transient notifications", "tooltip" : "Check this to ignore transient notifications." }, "section2": { "type": "section", "description": "Display" }, "showEmptyTray" : { "type" : "switch", "default" : false, "description" : "Show empty tray", "tooltip" : "Check this to show the tray even when there are no new notifications." } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/0000775000175000017500000000000013215735076027112 5ustar fabiofabio././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/empty-notif-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/empty-notif-symboli0000664000175000017500000000031313215735076032761 0ustar fabiofabio ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/normal-notif-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/normal-notif-symbol0000664000175000017500000000055413215735076032751 0ustar fabiofabio ././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/low-notif-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/low-notif-symbolic.0000664000175000017500000000056313215735076032654 0ustar fabiofabio ././@LongLink0000644000000000000000000000016100000000000011601 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/alt-critical-notif-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/alt-critical-notif-0000664000175000017500000000060313215735076032576 0ustar fabiofabio ././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/critical-notif-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/icons/critical-notif-symb0000664000175000017500000000062313215735076032715 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/metadata.json0000664000175000017500000000027213215735076030453 0ustar fabiofabio{ "uuid": "notifications@cinnamon.org", "name": "Notifications", "description": "Click to display and manage system notifications", "role": "notifications", "icon": "cs-notifications" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/notifications@cinnamon.org/applet.js0000664000175000017500000003034313215735076027625 0ustar fabiofabioconst Applet = imports.ui.applet; const Lang = imports.lang; const Main = imports.ui.main; const Gtk = imports.gi.Gtk; const Gio = imports.gi.Gio; const PopupMenu = imports.ui.popupMenu; const St = imports.gi.St; const Mainloop = imports.mainloop; const Urgency = imports.ui.messageTray.Urgency; const NotificationDestroyedReason = imports.ui.messageTray.NotificationDestroyedReason; const Settings = imports.ui.settings; const Gettext = imports.gettext.domain("cinnamon-applets"); const PANEL_EDIT_MODE_KEY = "panel-edit-mode"; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this.setAllowedLayout(Applet.AllowedLayout.BOTH); // Settings this.settings = new Settings.AppletSettings(this, metadata.uuid, instanceId); this.settings.bind("ignoreTransientNotifications", "ignoreTransientNotifications"); this.settings.bind("showEmptyTray", "showEmptyTray", this._show_hide_tray); // Layout this._orientation = orientation; this.menuManager = new PopupMenu.PopupMenuManager(this); // Lists this.notifications = []; // The list of notifications, in order from oldest to newest. // Events Main.messageTray.connect('notify-applet-update', Lang.bind(this, this._notification_added)); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._on_panel_edit_mode_changed)); // States this._blinking = false; this._blink_toggle = false; }, _display: function() { // Always start the applet empty, void of any notifications. this.set_applet_icon_symbolic_name("empty-notif"); this.set_applet_tooltip(_("Notifications")); // Setup the notification container. this._maincontainer = new St.BoxLayout({name: 'traycontainer', vertical: true}); this._notificationbin = new St.BoxLayout({vertical:true}); this.button_label_box = new St.BoxLayout(); // Setup the tray icon. this.menu_label = new PopupMenu.PopupMenuItem(stringify(this.notifications.length)); this.menu_label.actor.reactive = false; this.menu_label.actor.can_focus = false; this.menu_label.label.add_style_class_name('popup-subtitle-menu-item'); this.clear_separator = new PopupMenu.PopupSeparatorMenuItem(); this.clear_action = new PopupMenu.PopupMenuItem(_("Clear notifications")); this.clear_action.connect('activate', Lang.bind(this, this._clear_all)); this.clear_action.actor.hide(); if (this._orientation == St.Side.BOTTOM) { this.menu.addMenuItem(this.menu_label); this.menu.addActor(this._maincontainer); this.menu.addMenuItem(this.clear_separator); this.menu.addMenuItem(this.clear_action); } else { this.menu.addMenuItem(this.clear_action); this.menu.addMenuItem(this.clear_separator); this.menu.addMenuItem(this.menu_label); this.menu.addActor(this._maincontainer); } this.scrollview = new St.ScrollView({ x_fill: true, y_fill: true, y_align: St.Align.START, style_class: "vfade"}); this._maincontainer.add(this.scrollview); this.scrollview.add_actor(this._notificationbin); this.scrollview.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); let vscroll = this.scrollview.get_vscroll_bar(); vscroll.connect('scroll-start', Lang.bind(this, function() { this.menu.passEvents = true; })); vscroll.connect('scroll-stop', Lang.bind(this, function() { this.menu.passEvents = false; })); // Alternative tray icons. this._crit_icon = new St.Icon({icon_name: 'critical-notif', icon_type: St.IconType.SYMBOLIC, reactive: true, track_hover: true, style_class: 'system-status-icon' }); this._alt_crit_icon = new St.Icon({icon_name: 'alt-critical-notif', icon_type: St.IconType.SYMBOLIC, reactive: true, track_hover: true, style_class: 'system-status-icon' }); this._on_panel_edit_mode_changed(); }, _notification_added: function (mtray, notification) { // Notification event handler. // Ignore transient notifications? if (this.ignoreTransientNotifications && notification.isTransient) { return; } if (notification.enter_id > 0) { notification.actor.disconnect(notification.enter_id); notification.enter_id = 0; } if (notification.leave_id > 0) { notification.actor.disconnect(notification.leave_id); notification.leave_id = 0; } notification.actor.opacity = (notification._table.get_theme_node().get_length('opacity') / global.ui_scale) || 255; notification.actor.unparent(); let existing_index = this.notifications.indexOf(notification); if (existing_index != -1) { // This notification is already listed. if (notification._destroyed) { this.notifications.splice(existing_index, 1); } else { notification._inNotificationBin = true; global.reparentActor(notification.actor, this._notificationbin); notification.expand(); notification._timeLabel.show(); } this.update_list(); return; } else if (notification._destroyed) { return; } // Add notification to list. notification._inNotificationBin = true; this.notifications.push(notification); // Steal the notication panel. notification.expand(); this._notificationbin.add(notification.actor); notification.actor._parent_container = this._notificationbin; notification.actor.add_style_class_name('notification-applet-padding'); // Register for destruction. notification.connect('clicked', Lang.bind(this, this._item_clicked, false)); notification.connect('destroy', Lang.bind(this, this._item_clicked, true)); notification._timeLabel.show(); this.update_list(); }, _item_clicked: function(notification, destroyed) { let i = this.notifications.indexOf(notification); if (i != -1) { this.notifications.splice(i, 1); if (!destroyed) { notification.destroy(NotificationDestroyedReason.DISMISSED); } } this.update_list(); }, update_list: function () { try { let count = this.notifications.length; if (count > 0) { // There are notifications. this.actor.show(); this.clear_action.actor.show(); this.set_applet_label(count.toString()); // Find max urgency and derive list icon. let max_urgency = -1; for (let i = 0; i < count; i++) { let cur_urgency = this.notifications[i].urgency; if (cur_urgency > max_urgency) max_urgency = cur_urgency; } switch (max_urgency) { case Urgency.LOW: this._blinking = false; this.set_applet_icon_symbolic_name("low-notif"); break; case Urgency.NORMAL: case Urgency.HIGH: this._blinking = false; this.set_applet_icon_symbolic_name("normal-notif"); break; case Urgency.CRITICAL: if (!this._blinking) { this._blinking = true; this.critical_blink(); } break; } } else { // There are no notifications. this._blinking = false; this.set_applet_label(''); this.set_applet_icon_symbolic_name("empty-notif"); this.clear_action.actor.hide(); if (!this.showEmptyTray) { this.actor.hide(); } } this.menu_label.label.set_text(stringify(count)); this._notificationbin.queue_relayout(); } catch (e) { global.logError(e); } }, _clear_all: function() { let count = this.notifications.length; if (count > 0) { for (let i = count-1; i >=0; i--) { this._notificationbin.remove_actor(this.notifications[i].actor); this.notifications[i].destroy(NotificationDestroyedReason.DISMISSED); } } this.notifications = []; this.update_list(); }, _show_hide_tray: function() { // Show or hide the notification tray. if (this.notifications.length || this.showEmptyTray) { this.actor.show(); } else { this.actor.hide(); } }, _on_panel_edit_mode_changed: function () { if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { this.actor.show(); } else { this.update_list(); } }, on_applet_added_to_panel: function() { this.on_orientation_changed(this._orientation); }, on_orientation_changed: function (orientation) { this._orientation = orientation; if (this.menu) { this.menu.destroy(); } this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this._display(); }, on_applet_clicked: function(event) { this._update_timestamp(); this.menu.toggle(); }, _update_timestamp: function () { let actors = this._notificationbin.get_children(); if (actors) { for (let i = 0; i < actors.length; i++) { let notification = actors[i]._delegate; let orig_time = notification._timestamp; notification._timeLabel.clutter_text.set_markup(timeify(orig_time)); } } }, critical_blink: function () { if (!this._blinking) return; if (this._blink_toggle) { this._applet_icon_box.child = this._crit_icon; } else { this._applet_icon_box.child = this._alt_crit_icon; } this._blink_toggle = !this._blink_toggle; Mainloop.timeout_add_seconds(1, Lang.bind(this, this.critical_blink)); } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } function stringify(count) { let str; switch (true) { case (count == 0): str = _("No notifications"); break; case (count == 1): str = count.toString() + _(" notification"); break; case (count > 1): str = count.toString() + _(" notifications"); break; default: str = ""; } return str; } function timeify(orig_time) { let settings = new Gio.Settings({schema_id: 'org.cinnamon.desktop.interface'}); let use_24h = settings.get_boolean('clock-use-24h'); let now = new Date(); let diff = Math.floor((now.getTime() - orig_time.getTime()) / 1000); // get diff in seconds let str; if (use_24h) { str = orig_time.toLocaleFormat('%T'); } else { str = orig_time.toLocaleFormat('%r'); } switch (true) { case (diff <= 15): { str += " (" + _("just now") + ")"; break; } case (diff > 15 && diff <= 59): { str += " (" + Gettext.ngettext("%d second ago", "%d seconds ago", diff).format(diff) + ")"; break; } case (diff > 59 && diff <= 3540): { let diff_minutes = Math.floor(diff / 60); str += " (" + Gettext.ngettext("%d minute ago", "%d minutes ago", diff_minutes).format(diff_minutes) + ")"; break; } } return str; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/0000775000175000017500000000000013215735076025127 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/0000775000175000017500000000000013215735076026242 5ustar fabiofabio././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-disabled-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-disabled-symb0000664000175000017500000000607113215735076032707 0ustar fabiofabio Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme ././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-pause-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-pause-symboli0000664000175000017500000000616313215735076032763 0ustar fabiofabio Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-play-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/icons/slideshow-play-symbolic0000664000175000017500000000601013215735076032745 0ustar fabiofabio Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme Cinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/metadata.json0000664000175000017500000000024413215735076027602 0ustar fabiofabio{ "uuid":"slideshow@cinnamon.org", "name":"Slideshow Controls", "description":"Basic controls for the Cinnamon slideshow", "icon":"preferences-desktop-wallpaper" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/slideshow@cinnamon.org/applet.js0000664000175000017500000001325613215735076026761 0ustar fabiofabioconst Lang = imports.lang; const Gio = imports.gi.Gio; const St = imports.gi.St; const Main = imports.ui.main; const Applet = imports.ui.applet; const PopupMenu = imports.ui.popupMenu; const Util = imports.misc.util; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this._slideshowSettings = new Gio.Settings({ schema_id: 'org.cinnamon.desktop.background.slideshow' }); try { if (this._slideshowSettings.get_boolean("slideshow-enabled")) { if (!this._slideshowSettings.get_boolean("slideshow-paused")) { this.set_applet_icon_symbolic_name('slideshow-play-symbolic.svg'); this.set_applet_tooltip(_("Click to pause the slideshow")); } else { this.set_applet_icon_symbolic_name('slideshow-pause-symbolic.svg'); this.set_applet_tooltip(_("Click to resume the slideshow")); } } else { this.set_applet_icon_symbolic_name('slideshow-disabled-symbolic.svg'); this.set_applet_tooltip(_("The slideshow is disabled")); } this._slideshowSettings.connect("changed::slideshow-enabled", Lang.bind(this, this._on_slideshow_enabled_changed)); this._slideshowSettings.connect("changed::slideshow-paused", Lang.bind(this, this._on_slideshow_paused_changed)); this.enable_slideshow_switch = new PopupMenu.PopupSwitchMenuItem(_("Slideshow"), this._slideshowSettings.get_boolean("slideshow-enabled")); this._applet_context_menu.addMenuItem(this.enable_slideshow_switch); this.enable_slideshow_switch.connect("toggled", Lang.bind(this, this._on_slideshow_enabled_toggled)); this._applet_context_menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.next_image_context_menu_item = new PopupMenu.PopupIconMenuItem(_("Next Background"), "media-seek-forward", St.IconType.SYMBOLIC); this.next_image_context_menu_item.connect('activate', Lang.bind(this, this.get_next_image)); this._applet_context_menu.addMenuItem(this.next_image_context_menu_item); this._applet_context_menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.open_settings_context_menu_item = new PopupMenu.PopupIconMenuItem(_("Background Settings"), "preferences-desktop-wallpaper", St.IconType.SYMBOLIC); this.open_settings_context_menu_item.connect('activate', Lang.bind(this, function() { Util.spawnCommandLine("cinnamon-settings backgrounds"); })); this._applet_context_menu.addMenuItem(this.open_settings_context_menu_item); } catch(e) { global.logError(e); } }, on_applet_clicked: function(event) { if (this._slideshowSettings.get_boolean("slideshow-enabled")) { if (!this._slideshowSettings.get_boolean("slideshow-paused")) { this._slideshowSettings.set_boolean("slideshow-paused", true); this.set_applet_icon_symbolic_name('slideshow-pause-symbolic.svg'); this.set_applet_tooltip(_("Click to resume the slideshow")); } else { this._slideshowSettings.set_boolean("slideshow-paused", false); this.set_applet_icon_symbolic_name('slideshow-play-symbolic.svg'); this.set_applet_tooltip(_("Click to pause the slideshow")); } } }, _on_slideshow_enabled_toggled: function() { if (this._slideshowSettings.get_boolean("slideshow-enabled")) { this._slideshowSettings.set_boolean("slideshow-enabled", false); this.set_applet_icon_symbolic_name('slideshow-disabled-symbolic.svg'); this.set_applet_tooltip(_("The slideshow is disabled")); } else { this._slideshowSettings.set_boolean("slideshow-enabled", true); this.set_applet_icon_symbolic_name('slideshow-play-symbolic.svg'); this.set_applet_tooltip(_("Click to pause the slideshow")); } }, _on_slideshow_enabled_changed: function() { if (this._slideshowSettings.get_boolean("slideshow-enabled")) { this.enable_slideshow_switch.setToggleState(true); this.set_applet_icon_symbolic_name('slideshow-play-symbolic.svg'); this.set_applet_tooltip(_("Click to pause the slideshow")); } else { this.enable_slideshow_switch.setToggleState(false); this.set_applet_icon_symbolic_name('slideshow-disabled-symbolic.svg'); this.set_applet_tooltip(_("The slideshow is disabled")); } }, _on_slideshow_paused_changed: function() { if (this._slideshowSettings.get_boolean("slideshow-paused")) { this.set_applet_icon_symbolic_name('slideshow-pause-symbolic.svg'); this.set_applet_tooltip(_("Click to resume the slideshow")); } else { this.set_applet_icon_symbolic_name('slideshow-play-symbolic.svg'); this.set_applet_tooltip(_("Click to pause the slideshow")); } }, get_next_image: function() { Main.slideshowManager.getNextImage(); } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/0000775000175000017500000000000013215735076024101 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/settings-schema.json0000664000175000017500000000034213215735076030071 0ustar fabiofabio{ "section1": { "type": "section", "description": "Behavior" }, "activate-on-hover": { "type": "switch", "default" : false, "description" : "Activate expo on hover" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/icons/0000775000175000017500000000000013215735076025214 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/icons/cinnamon-expo-symbolic.svg0000664000175000017500000000045013215735076032326 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/metadata.json0000664000175000017500000000023213215735076026551 0ustar fabiofabio{ "uuid": "expo@cinnamon.org", "name": "Expo", "description": "Click or hover to activate Expo view", "icon": "workspace-overview", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/expo@cinnamon.org/applet.js0000664000175000017500000000307213215735076025726 0ustar fabiofabioconst Applet = imports.ui.applet; const Lang = imports.lang; const Main = imports.ui.main; const Settings = imports.ui.settings; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("cinnamon-expo"); this.set_applet_tooltip(_("Expo")); this._hover_activates = false; this.settings = new Settings.AppletSettings(this, metadata.uuid, this.instance_id); this.settings.bind("activate-on-hover", "_hover_activates"); this.actor.connect('enter-event', Lang.bind(this, this._onEntered)); } catch (e) { global.logError(e); } }, on_applet_clicked: function(event) { if (this._hover_activates) return; this.doAction(); }, _onEntered: function(event) { if (!this._hover_activates || global.settings.get_boolean("panel-edit-mode")) return; this.doAction(); }, doAction: function() { if (!Main.expo.animationInProgress) Main.expo.toggle(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/0000775000175000017500000000000013215735076026615 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/icons/0000775000175000017500000000000013215735076027730 5ustar fabiofabio././@LongLink0000644000000000000000000000016600000000000011606 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/icons/on-screen-keyboard-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/icons/on-screen-keyb0000664000175000017500000000206313215735076032475 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme ././@LongLink0000644000000000000000000000017700000000000011610 Lustar rootrootCinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/icons/on-screen-keyboard-disabled-symbolic.svgCinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/icons/on-screen-keyb0000664000175000017500000000526113215735076032500 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme Cinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/metadata.json0000664000175000017500000000025713215735076031274 0ustar fabiofabio{ "uuid": "on-screen-keyboard@cinnamon.org", "name": "On-Screen keyboard", "icon": "input-keyboard", "description": "A Cinnamon applet to launch the on-screen keyboard" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/on-screen-keyboard@cinnamon.org/applet.js0000664000175000017500000000263013215735076030441 0ustar fabiofabioconst Applet = imports.ui.applet; const Gio = imports.gi.Gio; const Lang = imports.lang; const Main = imports.ui.main; function MyApplet(metadata, orientation, panel_height, instanceId) { this._init(metadata, orientation, panel_height, instanceId); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instanceId) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instanceId); this.settings = new Gio.Settings({ schema_id: 'org.cinnamon.desktop.a11y.applications' }); this.settings.connect('changed::screen-keyboard-enabled', Lang.bind(this, this.update_status)); this.update_status(); }, on_applet_clicked: function(event) { Main.keyboard.toggle(); }, update_status: function() { if (this.settings.get_boolean("screen-keyboard-enabled")) { this.set_applet_icon_symbolic_name('on-screen-keyboard'); this.set_applet_tooltip(_("Click to toggle the on-screen keyboard")); } else { this.set_applet_icon_symbolic_name('on-screen-keyboard-disabled'); this.set_applet_tooltip(_("Click to enable the on-screen keyboard")); } } }; function main(metadata, orientation, panel_height, instanceId) { let myApplet = new MyApplet(metadata, orientation, panel_height, instanceId); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/network@cinnamon.org/0000775000175000017500000000000013215735076024617 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/network@cinnamon.org/metadata.json0000664000175000017500000000020313215735076027265 0ustar fabiofabio{ "uuid": "network@cinnamon.org", "name": "Network Manager", "description": "Network manager applet", "icon": "network-idle" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/network@cinnamon.org/applet.js0000664000175000017500000025261113215735076026451 0ustar fabiofabioconst Applet = imports.ui.applet; const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; const Lang = imports.lang; const NetworkManager = imports.gi.NetworkManager; const NMClient = imports.gi.NMClient; const Signals = imports.signals; const St = imports.gi.St; const Mainloop = imports.mainloop; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const MessageTray = imports.ui.messageTray; const ModemManager = imports.misc.modemManager; const Util = imports.misc.util; const DEFAULT_PERIODIC_UPDATE_FREQUENCY_SECONDS = 10; const FAST_PERIODIC_UPDATE_FREQUENCY_SECONDS = 2; const NMConnectionCategory = { INVALID: 'invalid', WIRED: 'wired', WIRELESS: 'wireless', WWAN: 'wwan', VPN: 'vpn' }; const NMAccessPointSecurity = { UNKNOWN: 0, NONE: 1, WEP: 2, WPA_PSK: 3, WPA2_PSK: 4, WPA_ENT: 5, WPA2_ENT: 6 }; // small optimization, to avoid using [] all the time const NM80211Mode = NetworkManager['80211Mode']; const NM80211ApFlags = NetworkManager['80211ApFlags']; const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags']; // number of wireless networks that should be visible // (the remaining are placed into More...) const NUM_VISIBLE_NETWORKS = 5; function ssidCompare(one, two) { if (!one || !two) return false; if (one.length != two.length) return false; for (let i = 0; i < one.length; i++) { if (one[i] != two[i]) return false; } return true; } // shared between NMNetworkMenuItem and NMDeviceWWAN function signalToIcon(value) { if (value > 80) return 'excellent'; if (value > 55) return 'good'; if (value > 30) return 'ok'; if (value > 5) return 'weak'; return 'none'; } // shared between NMNetworkMenuItem and NMDeviceWireless function sortAccessPoints(accessPoints) { return accessPoints.sort(function (one, two) { return two.strength - one.strength; }); } function ssidToLabel(ssid) { let label = NetworkManager.utils_ssid_to_utf8(ssid); if (!label) label = _(""); return label; } function NMNetworkMenuItem() { this._init.apply(this, arguments); } NMNetworkMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(accessPoints, title, params) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params); accessPoints = sortAccessPoints(accessPoints); this.bestAP = accessPoints[0]; if (!title) { let ssid = this.bestAP.get_ssid(); title = ssidToLabel(ssid); } this._label = new St.Label({ text: title }); this.addActor(this._label); let strStrengh = String(this.bestAP.strength); strStrengh = strStrengh + '%'; this._labelStrength = new St.Label({ text: strStrengh }); this.addActor(this._labelStrength, { align: St.Align.END }); this._icons = new St.BoxLayout({ style_class: 'nm-menu-item-icons' }); this.addActor(this._icons, { align: St.Align.END }); this._signalIcon = new St.Icon({ icon_name: this._getIcon(), style_class: 'popup-menu-icon' }); this._icons.add_actor(this._signalIcon); this._secureIcon = new St.Icon({ style_class: 'popup-menu-icon' }); if (this.bestAP._secType != NMAccessPointSecurity.UNKNOWN && this.bestAP._secType != NMAccessPointSecurity.NONE) this._secureIcon.icon_name = 'network-wireless-encrypted'; this._icons.add_actor(this._secureIcon); this._accessPoints = [ ]; for (let i = 0; i < accessPoints.length; i++) { let ap = accessPoints[i]; // need a wrapper object here, because the access points can be shared // between many NMNetworkMenuItems let apObj = { ap: ap, updateId: ap.connect('notify::strength', Lang.bind(this, this._updated)) }; this._accessPoints.push(apObj); } }, _updated: function(ap) { if (ap.strength > this.bestAP.strength) this.bestAP = ap; this._signalIcon.icon_name = this._getIcon(); let strStrengh = String(this.bestAP.strength); strStrengh = strStrengh + '%'; this._labelStrength.set_text(strStrengh); }, _getIcon: function() { if (this.bestAP.mode == NM80211Mode.ADHOC) return 'network-workgroup'; else return 'network-wireless-signal-' + signalToIcon(this.bestAP.strength); }, updateAccessPoints: function(accessPoints) { for (let i = 0; i < this._accessPoints.length; i++) { let apObj = this._accessPoints[i]; apObj.ap.disconnect(apObj.updateId); apObj.updateId = 0; } accessPoints = sortAccessPoints(accessPoints); this.bestAP = accessPoints[0]; this._accessPoints = [ ]; for (let i = 0; i < accessPoints; i++) { let ap = accessPoints[i]; let apObj = { ap: ap, updateId: ap.connect('notify::strength', Lang.bind(this, this._updated)) }; this._accessPoints.push(apObj); } }, destroy: function() { for (let i = 0; i < this._accessPoints.length; i++) { let apObj = this._accessPoints[i]; apObj.ap.disconnect(apObj.updateId); apObj.updateId = 0; } PopupMenu.PopupBaseMenuItem.prototype.destroy.call(this); } }; function NMWiredSectionTitleMenuItem() { this._init.apply(this, arguments); } NMWiredSectionTitleMenuItem.prototype = { __proto__: PopupMenu.PopupSwitchMenuItem.prototype, _init: function(label, params) { params = params || { }; params.style_class = 'popup-subtitle-menu-item'; PopupMenu.PopupSwitchMenuItem.prototype._init.call(this, label, false, params); }, updateForDevice: function(device) { if (device) { this._device = device; this.setStatus(device.statusLabel); this.setToggleState(device.connected); // if this device is not controllable, hide the switch this._switch.actor.visible = device.controllable; } else this.setStatus(''); }, activate: function(event) { PopupMenu.PopupSwitchMenuItem.prototype.activate.call(this, event); if (!this._device) { log('Section title activated when there is more than one device, should be non reactive'); return; } let newState = this._switch.state; // Immediately reset the switch to false, it will be updated appropriately // by state-changed signals in devices (but fixes the VPN not being in sync // if the ActiveConnection object is never seen by libnm-glib) this._switch.setToggleState(false); if (newState) this._device.activate(); else this._device.deactivate(); } }; function NMWirelessSectionTitleMenuItem() { this._init.apply(this, arguments); } NMWirelessSectionTitleMenuItem.prototype = { __proto__: PopupMenu.PopupSwitchMenuItem.prototype, _init: function(client, property, title, params) { params = params || { }; params.style_class = 'popup-subtitle-menu-item'; PopupMenu.PopupSwitchMenuItem.prototype._init.call(this, title, false, params); this._client = client; this._property = property + '_enabled'; this._propertyHardware = property + '_hardware_enabled'; this._setEnabledFunc = property + '_set_enabled'; this._client.connect('notify::' + property + '-enabled', Lang.bind(this, this._propertyChanged)); this._client.connect('notify::' + property + '-hardware-enabled', Lang.bind(this, this._propertyChanged)); this._propertyChanged(); }, updateForDevice: function(device) { this._device = device; // we show the switch // - if there not just one device // - if the switch is off // - if the device is activated or disconnected if (device && this._softwareEnabled && this._hardwareEnabled) { this.setStatus(device.statusLabel); this._switch.actor.visible = device.controllable; } else { this.setStatus(null); this._switch.actor.show(); } }, activate: function(event) { PopupMenu.PopupSwitchMenuItem.prototype.activate.call(this, event); log(this._setEnabledFunc); this._client[this._setEnabledFunc](this._switch.state); if (!this._device) { log('Section title activated when there is more than one device, should be non reactive'); return; } let newState = this._switch.state; if (newState) this._device.activate(); else this._device.deactivate(); this.emit('enabled-changed', this._switch.state); }, _propertyChanged: function() { this._softwareEnabled = this._client[this._property]; this._hardwareEnabled = this._client[this._propertyHardware]; let enabled = this._softwareEnabled && this._hardwareEnabled; this.setToggleState(enabled); if (!this._hardwareEnabled) /* Translators: this indicates that wireless or wwan is disabled by hardware killswitch */ this.setStatus(_("disabled")); this.emit('enabled-changed', enabled); } }; function NMDevice() { throw new TypeError('Instantanting abstract class NMDevice'); } NMDevice.prototype = { _init: function(client, device, connections) { this.device = device; if (device) { this.device._delegate = this; this._stateChangedId = this.device.connect('state-changed', Lang.bind(this, this._deviceStateChanged)); } else this._stateChangedId = 0; // protected this._client = client; this._connections = [ ]; for (let i = 0; i < connections.length; i++) { if (!connections[i]._uuid) continue; if (!this.connectionValid(connections[i])) continue; // record the connection let obj = { connection: connections[i], name: connections[i]._name, uuid: connections[i]._uuid, timestamp: connections[i]._timestamp, }; this._connections.push(obj); } this._connections.sort(this._connectionSortFunction); this._activeConnection = null; this._activeConnectionItem = null; this._autoConnectionItem = null; this._overflowItem = null; if (this.device) { this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' }); this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) { if (state) this.activate(); else this.deactivate(); this.emit('enabled-changed'); })); this._updateStatusItem(); } this.section = new PopupMenu.PopupMenuSection(); this._createSection(); }, destroy: function() { if (this.device) this.device._delegate = null; if (this._stateChangedId) { // Need to go through GObject.Object.prototype because // nm_device_disconnect conflicts with g_signal_disconnect GObject.Object.prototype.disconnect.call(this.device, this._stateChangedId); this._stateChangedId = 0; } if (this._carrierChangedId) { // see above for why this is needed GObject.Object.prototype.disconnect.call(this.device, this._carrierChangedId); this._carrierChangedId = 0; } if (this._firmwareChangedId) { GObject.Object.prototype.disconnect.call(this.device, this._firmwareChangedId); this._firmwareChangedId = 0; } this._clearSection(); if (this.statusItem) this.statusItem.destroy(); this.section.destroy(); }, deactivate: function() { this.device.disconnect(function() {}); }, activate: function() { if (this._activeConnection) // nothing to do return; // pick the most recently used connection and connect to that // or if no connections ever set, create an automatic one if (this._connections.length > 0) { this._client.activate_connection(this._connections[0].connection, this.device, null, null); } else if (this._autoConnectionName) { let connection = this._createAutomaticConnection(); if (connection) this._client.add_and_activate_connection(connection, this.device, null, null); } }, get connected() { return this.device.state == NetworkManager.DeviceState.ACTIVATED; }, setActiveConnection: function(activeConnection) { if (activeConnection == this._activeConnection) // nothing to do return; // remove any UI if (this._activeConnectionItem) { this._activeConnectionItem.destroy(); this._activeConnectionItem = null; } this._activeConnection = activeConnection; this._clearSection(); this._createSection(); }, checkConnection: function(connection) { let exists = this._findConnection(connection._uuid) != -1; let valid = this.connectionValid(connection); if (exists && !valid) this.removeConnection(connection); else if (!exists && valid) this.addConnection(connection); }, addConnection: function(connection) { // record the connection let obj = { connection: connection, name: connection._name, uuid: connection._uuid, timestamp: connection._timestamp, }; this._connections.push(obj); this._connections.sort(this._connectionSortFunction); this._clearSection(); this._createSection(); }, removeConnection: function(connection) { if (!connection._uuid) { log('Cannot remove a connection without an UUID'); return; } let pos = this._findConnection(connection._uuid); if (pos == -1) { // this connection was never added, nothing to do here return; } let obj = this._connections[pos]; if (obj.item) obj.item.destroy(); this._connections.splice(pos, 1); if (this._connections.length <= 1) { // We need to show the automatic connection again // (or in the case of NMDeviceWired, we want to hide // the only explicit connection) this._clearSection(); this._createSection(); } }, connectionValid: function(connection) { return this.device.connection_valid(connection); }, _connectionSortFunction: function(one, two) { if (one.timestamp == two.timestamp) return GLib.utf8_collate(one.name, two.name); return two.timestamp - one.timestamp; }, setEnabled: function(enabled) { // do nothing by default, we want to keep the conneciton list visible // in the majority of cases (wired, wwan, vpn) }, get statusLabel(){ switch(this.device.state) { case NetworkManager.DeviceState.DISCONNECTED: case NetworkManager.DeviceState.ACTIVATED: return null; case NetworkManager.DeviceState.UNMANAGED: /* Translators: this is for network devices that are physically present but are not under NetworkManager's control (and thus cannot be used in the menu) */ return _("unmanaged"); case NetworkManager.DeviceState.DEACTIVATING: return _("disconnecting..."); case NetworkManager.DeviceState.PREPARE: case NetworkManager.DeviceState.CONFIG: case NetworkManager.DeviceState.IP_CONFIG: case NetworkManager.DeviceState.IP_CHECK: case NetworkManager.DeviceState.SECONDARIES: return _("connecting..."); case NetworkManager.DeviceState.NEED_AUTH: /* Translators: this is for network connections that require some kind of key or password */ return _("authentication required"); case NetworkManager.DeviceState.UNAVAILABLE: // This state is actually a compound of various states (generically unavailable, // firmware missing, carrier not available), that are exposed by different properties // (whose state may or may not updated when we receive state-changed). if (!this._firmwareMissingId) this._firmwareMissingId = this.device.connect('notify::firmware-missing', Lang.bind(this, this._substateChanged)); if (this.device.firmware_missing) { /* Translators: this is for devices that require some kind of firmware or kernel module, which is missing */ return _("firmware missing"); } if (this.device.capabilities & NetworkManager.DeviceCapabilities.CARRIER_DETECT) { if (!this._carrierChangedId) this._carrierChangedId = this.device.connect('notify::carrier', Lang.bind(this, this._substateChanged)); if (!this.carrier) { /* Translators: this is for wired network devices that are physically disconnected */ return _("cable unplugged"); } } /* Translators: this is for a network device that cannot be activated (for example it is disabled by rfkill, or it has no coverage */ return _("unavailable"); case NetworkManager.DeviceState.FAILED: return _("connection failed"); default: log('Device state invalid, is %d'.format(this.device.state)); return 'invalid'; } }, get controllable(){ // controllable for every state except unavailable or unmanaged if(this.device.state === NetworkManager.DeviceState.UNAVAILABLE || this.device.state === NetworkManager.DeviceState.UNMANAGED) return false; return true; }, // protected _createAutomaticConnection: function() { throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection'); }, _findConnection: function(uuid) { for (let i = 0; i < this._connections.length; i++) { let obj = this._connections[i]; if (obj.uuid == uuid) return i; } return -1; }, _clearSection: function() { // Clear everything this.section.removeAll(); this._autoConnectionItem = null; this._activeConnectionItem = null; this._overflowItem = null; for (let i = 0; i < this._connections.length; i++) { this._connections[i].item = null; } }, _shouldShowConnectionList: function() { return (this.device.state >= NetworkManager.DeviceState.DISCONNECTED); }, _createSection: function() { if (!this._shouldShowConnectionList()) return; if (this._activeConnection) { this._createActiveConnectionItem(); this.section.addMenuItem(this._activeConnectionItem); } if (this._connections.length > 0) { let activeOffset = this._activeConnectionItem ? 1 : 0; for(let j = 0; j < this._connections.length; ++j) { let obj = this._connections[j]; if (this._activeConnection && obj.connection == this._activeConnection._connection) continue; obj.item = this._createConnectionItem(obj); if (j + activeOffset >= NUM_VISIBLE_NETWORKS) { if (!this._overflowItem) { this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More")); this.section.addMenuItem(this._overflowItem); } this._overflowItem.menu.addMenuItem(obj.item); } else this.section.addMenuItem(obj.item); } } else if (this._autoConnectionName) { this._autoConnectionItem = new PopupMenu.PopupMenuItem(this._autoConnectionName); this._autoConnectionItem.connect('activate', Lang.bind(this, function() { let connection = this._createAutomaticConnection(); if (connection) this._client.add_and_activate_connection(connection, this.device, null, null); })); this.section.addMenuItem(this._autoConnectionItem); } }, _createConnectionItem: function(obj) { let connection = obj.connection; let item = new PopupMenu.PopupMenuItem(obj.name); item.connect('activate', Lang.bind(this, function() { this._client.activate_connection(connection, this.device, null, null); })); return item; }, _createActiveConnectionItem: function() { let title; let active = this._activeConnection._connection; if (active) { title = active._name; } else { /* TRANSLATORS: this is the indication that a connection for another logged in user is active, and we cannot access its settings (including the name) */ title = _("Connected (private)"); } this._activeConnectionItem = new PopupMenu.PopupMenuItem(title, { reactive: false }); this._activeConnectionItem.setShowDot(true); }, _deviceStateChanged: function(device, newstate, oldstate, reason) { if (newstate == oldstate) { log('device emitted state-changed without actually changing state'); return; } if (oldstate == NetworkManager.DeviceState.ACTIVATED) { this.emit('network-lost'); } if (newstate == NetworkManager.DeviceState.FAILED) { this.emit('activation-failed', reason); } this._updateStatusItem(); this._clearSection(); this._createSection(); this.emit('state-changed'); }, _updateStatusItem: function() { if (this._carrierChangedId) { // see above for why this is needed GObject.Object.prototype.disconnect.call(this.device, this._carrierChangedId); this._carrierChangedId = 0; } if (this._firmwareChangedId) { GObject.Object.prototype.disconnect.call(this.device, this._firmwareChangedId); this._firmwareChangedId = 0; } this.statusItem.setStatus(this.statusLabel); this.statusItem.setToggleState(this.connected); // if this device is not controllable, hide the switch this.statusItem._switch.actor.visible = this.controllable; }, _substateChanged: function() { this.statusItem.setStatus(this.statusLabel); this.statusItem._switch.actor.visible = this.controllable; this.emit('state-changed'); }, _getDescription: function() { let dev_product = this.device.get_product(); let dev_vendor = this.device.get_vendor(); if (!dev_product || !dev_vendor) { if (this.device.name) { return this.device.name; } else { switch (this.device.get_device_type()) { case NetworkManager.DeviceType.ETHERNET: return _("Ethernet"); case NetworkManager.DeviceType.WIFI: return _("Wifi"); case NetworkManager.DeviceType.MODEM: return _("Modem"); case NetworkManager.DeviceType.BT: return _("Bluetooth"); default: return ""; } } } let product = Util.fixupPCIDescription(dev_product); let vendor = Util.fixupPCIDescription(dev_vendor); let out = ''; // Another quick hack; if all of the fixed up vendor string // is found in product, ignore the vendor. if (product.indexOf(vendor) == -1) out += vendor + ' '; out += product; return out; } }; Signals.addSignalMethods(NMDevice.prototype); function NMDeviceWired() { this._init.apply(this, arguments); } NMDeviceWired.prototype = { __proto__: NMDevice.prototype, _init: function(client, device, connections) { this._autoConnectionName = _("Auto Ethernet"); this.category = NMConnectionCategory.WIRED; NMDevice.prototype._init.call(this, client, device, connections); }, _createSection: function() { NMDevice.prototype._createSection.call(this); // if we have only one connection (normal or automatic) // we hide the connection list, and use the switch to control // the device // we can do it here because addConnection and removeConnection // both call _createSection at some point if (this._connections.length <= 1) this.section.actor.hide(); else this.section.actor.show(); }, _createAutomaticConnection: function() { let connection = new NetworkManager.Connection(); connection._uuid = NetworkManager.utils_uuid_generate(); connection.add_setting(new NetworkManager.SettingWired()); connection.add_setting(new NetworkManager.SettingConnection({ uuid: connection._uuid, id: this._autoConnectionName, type: NetworkManager.SETTING_WIRED_SETTING_NAME, autoconnect: true })); return connection; } }; function NMDeviceModem() { this._init.apply(this, arguments); } NMDeviceModem.prototype = { __proto__: NMDevice.prototype, _init: function(client, device, connections) { let is_wwan = false; this._enabled = true; this.mobileDevice = null; this._connectionType = 'ppp'; this._capabilities = device.current_capabilities; // Support new ModemManager1 devices if (device.udi.indexOf('/org/freedesktop/ModemManager1/Modem') == 0) { try { is_wwan = true; this.mobileDevice = new ModemManager.BroadbandModem(device.udi, device.current_capabilities); if (this._capabilities & NetworkManager.DeviceModemCapabilities.GSM_UMTS) { this._connectionType = NetworkManager.SETTING_GSM_SETTING_NAME; } else if (this._capabilities & NetworkManager.DeviceModemCapabilities.LTE) { this._connectionType = NetworkManager.SETTING_GSM_SETTING_NAME; } else if (this._capabilities & NetworkManager.DeviceModemCapabilities.CDMA_EVDO) { this._connectionType = NetworkManager.SETTING_CDMA_SETTING_NAME; } } catch (e){ global.logError(e); } } else if (this._capabilities & NetworkManager.DeviceModemCapabilities.GSM_UMTS) { is_wwan = true; this.mobileDevice = new ModemManager.ModemGsm(device.udi); this._connectionType = NetworkManager.SETTING_GSM_SETTING_NAME; } else if (this._capabilities & NetworkManager.DeviceModemCapabilities.CDMA_EVDO) { is_wwan = true; this.mobileDevice = new ModemManager.ModemCdma(device.udi); this._connectionType = NetworkManager.SETTING_CDMA_SETTING_NAME; } else if (this._capabilities & NetworkManager.DeviceModemCapabilities.LTE) { is_wwan = true; // FIXME: support signal quality } if (is_wwan) { this.category = NMConnectionCategory.WWAN; this._autoConnectionName = _("Auto broadband"); } else { this.category = NMConnectionCategory.WIRED; this._autoConnectionName = _("Auto dial-up"); } if (this.mobileDevice) { this._operatorNameId = this.mobileDevice.connect('notify::operator-name', Lang.bind(this, function() { if (this._operatorItem) { let name = this.mobileDevice.operator_name; if (name) { this._operatorItem.label.text = name; this._operatorItem.actor.show(); } else this._operatorItem.actor.hide(); } })); this._signalQualityId = this.mobileDevice.connect('notify::signal-quality', Lang.bind(this, function() { if (this._operatorItem) { this._operatorItem.setIcon(this._getSignalIcon()); } })); } NMDevice.prototype._init.call(this, client, device, connections); }, setEnabled: function(enabled) { this._enabled = enabled; if (this.category == NMConnectionCategory.WWAN) { if (enabled) { // prevent "network unavailable" statuses this.statusItem.setStatus(null); } else this.statusItem.setStatus(this.statusLabel); } NMDevice.prototype.setEnabled.call(this, enabled); }, get connected() { return this._enabled && this.device.state == NetworkManager.DeviceState.ACTIVATED; }, destroy: function() { if (this._operatorNameId) { this.mobileDevice.disconnect(this._operatorNameId); this._operatorNameId = 0; } if (this._signalQualityId) { this.mobileDevice.disconnect(this._signalQualityId); this._signalQualityId = 0; } NMDevice.prototype.destroy.call(this); }, _getSignalIcon: function() { return 'network-cellular-signal-' + signalToIcon(this.mobileDevice.signal_quality); }, _createSection: function() { if (!this._shouldShowConnectionList()) return; if (this.mobileDevice) { // If operator_name is null, just pass the empty string, as the item is hidden anyway this._operatorItem = new PopupMenu.PopupImageMenuItem(this.mobileDevice.operator_name || '', this._getSignalIcon(), { reactive: false }); if (!this.mobileDevice.operator_name) this._operatorItem.actor.hide(); this.section.addMenuItem(this._operatorItem); } NMDevice.prototype._createSection.call(this); }, _clearSection: function() { this._operatorItem = null; NMDevice.prototype._clearSection.call(this); }, _createAutomaticConnection: function() { // Mobile wizard is too complex for Cinnamon UI and // is handled by the network panel Util.spawn(['cinnamon-settings', 'network', 'connect-3g', this.device.get_path()]); return null; } }; function NMDeviceBluetooth() { this._init.apply(this, arguments); } NMDeviceBluetooth.prototype = { __proto__: NMDevice.prototype, _init: function(client, device, connections) { this._autoConnectionName = this._makeConnectionName(device); device.connect('notify::name', Lang.bind(this, this._updateAutoConnectionName)); this.category = NMConnectionCategory.WWAN; NMDevice.prototype._init.call(this, client, device, connections); }, _createAutomaticConnection: function() { let connection = new NetworkManager.Connection(); connection._uuid = NetworkManager.utils_uuid_generate(); connection.add_setting(new NetworkManager.SettingBluetooth()); connection.add_setting(new NetworkManager.SettingConnection({ uuid: connection._uuid, id: this._autoConnectionName, type: NetworkManager.SETTING_BLUETOOTH_SETTING_NAME, autoconnect: false })); return connection; }, _makeConnectionName: function(device) { let name = device.name; if (name) return _("Auto %s").format(name); else return _("Auto bluetooth"); }, _updateAutoConnectionName: function() { this._autoConnectionName = this._makeConnectionName(this.device); this._clearSection(); this._createSection(); } }; // Not a real device, but I save a lot code this way function NMDeviceVPN() { this._init.apply(this, arguments); } NMDeviceVPN.prototype = { __proto__: NMDevice.prototype, _init: function(client) { // Disable autoconnections this._autoConnectionName = null; this.category = NMConnectionCategory.VPN; NMDevice.prototype._init.call(this, client, null, [ ]); }, connectionValid: function(connection) { return connection._type == NetworkManager.SETTING_VPN_SETTING_NAME; }, get empty() { return this._connections.length == 0; }, get connected() { return !!this._activeConnection; }, setActiveConnection: function(activeConnection) { NMDevice.prototype.setActiveConnection.call(this, activeConnection); this.emit('active-connection-changed'); }, _shouldShowConnectionList: function() { return true; }, deactivate: function() { if (this._activeConnection) this._client.deactivate_connection(this._activeConnection); }, statusLabel: null, controllable: true }; function NMDeviceWireless() { this._init.apply(this, arguments); } NMDeviceWireless.prototype = { __proto__: NMDevice.prototype, _init: function(client, device, connections) { this.category = NMConnectionCategory.WIRELESS; this._overflowItem = null; this._networks = [ ]; // breaking the layers with this, but cannot call // this.connectionValid until I have a device this.device = device; let validConnections = connections.filter(Lang.bind(this, function(connection) { return this.connectionValid(connection); })); let accessPoints = device.get_access_points() || [ ]; for (let i = 0; i < accessPoints.length; i++) { // Access points are grouped by network let ap = accessPoints[i]; if (ap.get_ssid() == null) { // hidden access point cannot be added, we need to know // the SSID and security details to connect // nevertheless, the access point can acquire a SSID when // NetworkManager connects to it (via nmcli or cinnamon-settings) ap._notifySsidId = ap.connect('notify::ssid', Lang.bind(this, this._notifySsidCb)); continue; } let pos = this._findNetwork(ap); let obj; if (pos != -1) { obj = this._networks[pos]; obj.accessPoints.push(ap); } else { obj = { ssid: ap.get_ssid(), mode: ap.mode, security: this._getApSecurityType(ap), connections: [ ], item: null, accessPoints: [ ap ] }; obj.ssidText = ssidToLabel(obj.ssid); this._networks.push(obj); } // Check if some connection is valid for this AP for (let j = 0; j < validConnections.length; j++) { let connection = validConnections[j]; if (ap.connection_valid(connection) && obj.connections.indexOf(connection) == -1) { obj.connections.push(connection); } } } if (this.device.active_access_point) { let networkPos = this._findNetwork(this.device.active_access_point); if (networkPos == -1) // the connected access point is invisible this._activeNetwork = null; else this._activeNetwork = this._networks[networkPos]; } else { this._activeNetwork = null; } this._networks.sort(this._networkSortFunction); this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged)); this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded)); this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved)); NMDevice.prototype._init.call(this, client, device, validConnections); }, destroy: function() { if (this._apChangedId) { // see above for this HACK GObject.Object.prototype.disconnect.call(this.device, this._apChangedId); this._apChangedId = 0; } if (this._apAddedId) { GObject.Object.prototype.disconnect.call(this.device, this._apAddedId); this._apAddedId = 0; } if (this._apRemovedId) { GObject.Object.prototype.disconnect.call(this.device, this._apRemovedId); this._apRemovedId = 0; } NMDevice.prototype.destroy.call(this); }, setEnabled: function(enabled) { if (enabled) { this.statusItem.actor.show(); this.section.actor.show(); } else { this.statusItem.actor.hide(); this.section.actor.hide(); } }, activate: function() { if (this._activeConnection) // nothing to do return; // among all visible networks, pick the last recently used connection let best = null; let bestApObj = null; let bestTime = 0; for (let i = 0; i < this._networks.length; i++) { let apObj = this._networks[i]; for (let j = 0; j < apObj.connections.length; j++) { let connection = apObj.connections[j]; if (connection._timestamp > bestTime) { best = connection; bestTime = connection._timestamp; bestApObj = apObj; } } } if (best) { for (let i = 0; i < bestApObj.accessPoints.length; i++) { let ap = bestApObj.accessPoints[i]; if (ap.connection_valid(best)) { this._client.activate_connection(best, this.device, ap.dbus_path, null); break; } } return; } // XXX: what else to do? // for now, just pick a random network // (this function is called in a corner case anyway, that is, only when // the user toggles the switch and has more than one wireless device) if (this._networks.length > 0) { let connection = this._createAutomaticConnection(this._networks[0]); let accessPoints = sortAccessPoints(this._networks[0].accessPoints); this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null); } }, _notifySsidCb: function(accessPoint) { if (accessPoint.get_ssid() != null) { accessPoint.disconnect(accessPoint._notifySsidId); accessPoint._notifySsidId = 0; this._accessPointAdded(this.device, accessPoint); } }, _activeApChanged: function() { this._activeNetwork = null; let activeAp = this.device.active_access_point; if (activeAp) { let res = this._findExistingNetwork(activeAp); if (res != null) this._activeNetwork = this._networks[res.network]; } // we don't refresh the view here, setActiveConnection will }, _getApSecurityType: function(accessPoint) { if (accessPoint._secType) return accessPoint._secType; let flags = accessPoint.flags; let wpa_flags = accessPoint.wpa_flags; let rsn_flags = accessPoint.rsn_flags; let type; if (rsn_flags != NM80211ApSecurityFlags.NONE) { /* RSN check first so that WPA+WPA2 APs are treated as RSN/WPA2 */ if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X) type = NMAccessPointSecurity.WPA2_ENT; else if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK) type = NMAccessPointSecurity.WPA2_PSK; } else if (wpa_flags != NM80211ApSecurityFlags.NONE) { if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X) type = NMAccessPointSecurity.WPA_ENT; else if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK) type = NMAccessPointSecurity.WPA_PSK; } else { if (flags & NM80211ApFlags.PRIVACY) type = NMAccessPointSecurity.WEP; else type = NMAccessPointSecurity.NONE; } // cache the found value to avoid checking flags all the time accessPoint._secType = type; return type; }, _networkSortFunction: function(one, two) { let oneHasConnection = one.connections.length != 0; let twoHasConnection = two.connections.length != 0; // place known connections first // (-1 = good order, 1 = wrong order) if (oneHasConnection && !twoHasConnection) return -1; else if (!oneHasConnection && twoHasConnection) return 1; return two.accessPoints[0].strength - one.accessPoints[0].strength; /** let oneHasSecurity = one.security != NMAccessPointSecurity.NONE; let twoHasSecurity = two.security != NMAccessPointSecurity.NONE; // place secure connections first // (we treat WEP/WPA/WPA2 the same as there is no way to // take them apart from the UI) if (oneHasSecurity && !twoHasSecurity) return -1; else if (!oneHasSecurity && twoHasSecurity) return 1; // sort alphabetically return GLib.utf8_collate(one.ssidText, two.ssidText); **/ }, _networkCompare: function(network, accessPoint) { if (!ssidCompare(network.ssid, accessPoint.get_ssid())) return false; if (network.mode != accessPoint.mode) return false; if (network.security != this._getApSecurityType(accessPoint)) return false; return true; }, _findExistingNetwork: function(accessPoint) { for (let i = 0; i < this._networks.length; i++) { let apObj = this._networks[i]; for (let j = 0; j < apObj.accessPoints.length; j++) { if (apObj.accessPoints[j] == accessPoint) return { network: i, ap: j }; } } return null; }, _findNetwork: function(accessPoint) { if (accessPoint.get_ssid() == null) return -1; for (let i = 0; i < this._networks.length; i++) { if (this._networkCompare(this._networks[i], accessPoint)) return i; } return -1; }, _accessPointAdded: function(device, accessPoint) { if (accessPoint.get_ssid() == null) { // This access point is not visible yet // Wait for it to get a ssid accessPoint._notifySsidId = accessPoint.connect('notify::ssid', Lang.bind(this, this._notifySsidCb)); return; } let pos = this._findNetwork(accessPoint); let apObj; let needsupdate = false; if (pos != -1) { apObj = this._networks[pos]; if (apObj.accessPoints.indexOf(accessPoint) != -1) { log('Access point was already seen, not adding again'); return; } apObj.accessPoints.push(accessPoint); if (apObj.item) apObj.item.updateAccessPoints(apObj.accessPoints); } else { apObj = { ssid: accessPoint.get_ssid(), mode: accessPoint.mode, security: this._getApSecurityType(accessPoint), connections: [ ], item: null, accessPoints: [ accessPoint ] }; apObj.ssidText = ssidToLabel(apObj.ssid); needsupdate = true; } // check if this enables new connections for this group for (let i = 0; i < this._connections.length; i++) { let connection = this._connections[i].connection; if (accessPoint.connection_valid(connection) && apObj.connections.indexOf(connection) == -1) { apObj.connections.push(connection); // this potentially changes the order needsupdate = true; } } if (needsupdate) { if (apObj.item) apObj.item.destroy(); if (pos != -1) this._networks.splice(pos, 1); if (this._networks.length == 0) { // only network in the list this._networks.push(apObj); this._clearSection(); this._createSection(); return; } // skip networks that should appear earlier let menuPos = 0; for (pos = 0; pos < this._networks.length && this._networkSortFunction(this._networks[pos], apObj) < 0; ++pos) { if (this._networks[pos] != this._activeNetwork) menuPos++; } // (re-)add the network this._networks.splice(pos, 0, apObj); if (this._shouldShowConnectionList()) { menuPos += (this._activeConnectionItem ? 1 : 0); this._createNetworkItem(apObj, menuPos); } } }, _accessPointRemoved: function(device, accessPoint) { let res = this._findExistingNetwork(accessPoint); if (res == null) { return; } let apObj = this._networks[res.network]; apObj.accessPoints.splice(res.ap, 1); if (apObj.accessPoints.length == 0) { if (this._activeNetwork == apObj) this._activeNetwork = null; if (apObj.item) apObj.item.destroy(); if (this._overflowItem) { if (!apObj.isMore) { // we removed an item in the main menu, and we have a more submenu // we need to extract the first item in more and move it to the submenu let item = this._overflowItem.menu.firstMenuItem; if (item && item._apObj) { item.destroy(); // clear the cycle, and allow the construction of the new item item._apObj.item = null; this._createNetworkItem(item._apObj, NUM_VISIBLE_NETWORKS-1); } else { log('The more... menu was existing and empty! This should not happen'); } } // This can happen if the removed connection is from the overflow // menu, or if we just moved the last connection out from the menu if (this._overflowItem.menu.numMenuItems == 0) { this._overflowItem.destroy(); this._overflowItem = null; } } this._networks.splice(res.network, 1); } else if (apObj.item) apObj.item.updateAccessPoints(apObj.accessPoints); }, _createAPItem: function(connection, accessPointObj, useConnectionName) { let item = new NMNetworkMenuItem(accessPointObj.accessPoints, useConnectionName ? connection._name : undefined); item._connection = connection; item.connect('activate', Lang.bind(this, function() { let accessPoints = sortAccessPoints(accessPointObj.accessPoints); for (let i = 0; i < accessPoints.length; i++) { if (accessPoints[i].connection_valid(connection)) { this._client.activate_connection(connection, this.device, accessPoints[i].dbus_path, null); break; } } })); return item; }, _clearSection: function() { NMDevice.prototype._clearSection.call(this); for (let i = 0; i < this._networks.length; i++) this._networks[i].item = null; this._overflowItem = null; }, removeConnection: function(connection) { if (!connection._uuid) return; let pos = this._findConnection(connection._uuid); if (pos == -1) { // removing connection that was never added return; } this._connections.splice(pos, 1); let anyauto = false, forceupdate = false; for (let i = 0; i < this._networks.length; i++) { let apObj = this._networks[i]; let connections = apObj.connections; for (let k = 0; k < connections.length; k++) { if (connections[k]._uuid == connection._uuid) { // remove the connection from the access point group connections.splice(k); anyauto = connections.length == 0; if (anyauto) { // this potentially changes the sorting order forceupdate = true; break; } if (apObj.item) { if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) { let items = apObj.item.menu.getMenuItems(); if (items.length == 2) { // we need to update the connection list to convert this to a normal item forceupdate = true; } else { for (let j = 0; j < items.length; j++) { if (items[j]._connection._uuid == connection._uuid) { items[j].destroy(); break; } } } } else { apObj.item.destroy(); apObj.item = null; } } break; } } } if (forceupdate || anyauto) { this._networks.sort(this._networkSortFunction); this._clearSection(); this._createSection(); } }, addConnection: function(connection) { // record the connection let obj = { connection: connection, name: connection._name, uuid: connection._uuid, }; this._connections.push(obj); // find an appropriate access point let forceupdate = false; for (let i = 0; i < this._networks.length; i++) { let apObj = this._networks[i]; // Check if connection is valid for any of these access points for (let k = 0; k < apObj.accessPoints.length; k++) { let ap = apObj.accessPoints[k]; if (ap.connection_valid(connection)) { apObj.connections.push(connection); // this potentially changes the sorting order forceupdate = true; break; } } } if (forceupdate) { this._networks.sort(this._networkSortFunction); this._clearSection(); this._createSection(); } }, _createActiveConnectionItem: function() { if (this._activeConnection._connection) { let connection = this._activeConnection._connection; if (!this._activeNetwork) { if (this.device.active_access_point) { let networkPos = this._findNetwork(this.device.active_access_point); if (networkPos == -1) // the connected access point is invisible this._activeNetwork = null; else this._activeNetwork = this._networks[networkPos]; } else { this._activeNetwork = null; } } if (this._activeNetwork) this._activeConnectionItem = new NMNetworkMenuItem(this._activeNetwork.accessPoints, undefined, { reactive: false }); else this._activeConnectionItem = new PopupMenu.PopupImageMenuItem(connection._name, 'network-wireless-connected', { reactive: false }); } else { // We cannot read the connection (due to ACL, or API incompatibility), but we still show signal if we have it if (this._activeNetwork) this._activeConnectionItem = new NMNetworkMenuItem(this._activeNetwork.accessPoints, undefined, { reactive: false }); else this._activeConnectionItem = new PopupMenu.PopupImageMenuItem(_("Connected (private)"), 'network-wireless-connected', { reactive: false }); } this._activeConnectionItem.setShowDot(true); }, _createAutomaticConnection: function(apObj) { let name; let ssid = NetworkManager.utils_ssid_to_utf8(apObj.ssid); if (ssid) { /* TRANSLATORS: this the automatic wireless connection name (including the network name) */ name = _("Auto %s").format(ssid); } else name = _("Auto wireless"); let connection = new NetworkManager.Connection(); connection.add_setting(new NetworkManager.SettingWireless()); connection.add_setting(new NetworkManager.SettingConnection({ id: name, autoconnect: true, // NetworkManager will know to ignore this if appropriate uuid: NetworkManager.utils_uuid_generate(), type: NetworkManager.SETTING_WIRELESS_SETTING_NAME })); return connection; }, _createNetworkItem: function(apObj, position) { if(!apObj.accessPoints || apObj.accessPoints.length == 0) { // this should not happen, but I have no idea why it happens return; } if(apObj.connections.length > 0) { if (apObj.connections.length == 1) { apObj.item = this._createAPItem(apObj.connections[0], apObj, false); } else { let title = apObj.ssidText; apObj.item = new PopupMenu.PopupSubMenuMenuItem(title); for (let i = 0; i < apObj.connections.length; i++) apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true)); } } else { apObj.item = new NMNetworkMenuItem(apObj.accessPoints); apObj.item.connect('activate', Lang.bind(this, function() { let accessPoints = sortAccessPoints(apObj.accessPoints); if ((accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT) || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { // 802.1x-enabled APs require further configuration, so they're // handled in cinnamon-settings Util.spawn(['cinnamon-settings', 'network', 'connect-8021x-wifi', this.device.get_path(), accessPoints[0].dbus_path]); } else { let connection = this._createAutomaticConnection(apObj); this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null); } })); } apObj.item._apObj = apObj; if (position < NUM_VISIBLE_NETWORKS) { apObj.isMore = false; this.section.addMenuItem(apObj.item, position); } else { if (!this._overflowItem) { this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More")); this.section.addMenuItem(this._overflowItem); } this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS); apObj.isMore = true; } }, _createSection: function() { if (!this._shouldShowConnectionList()) return; if(this._activeConnection) { this._createActiveConnectionItem(); this.section.addMenuItem(this._activeConnectionItem); } let activeOffset = this._activeConnectionItem ? 1 : 0; for(let j = 0; j < this._networks.length; j++) { let apObj = this._networks[j]; if (apObj == this._activeNetwork) continue; this._createNetworkItem(apObj, j + activeOffset); } }, }; function NMMessageTraySource() { this._init(); } NMMessageTraySource.prototype = { __proto__: MessageTray.Source.prototype, _init: function() { MessageTray.Source.prototype._init.call(this, _("Network Manager")); let icon = new St.Icon({ icon_name: 'network-transmit-receive', icon_type: St.IconType.SYMBOLIC, icon_size: this.ICON_SIZE }); this._setSummaryIcon(icon); } }; function RescanMenuItem() { this._init.apply(this); } RescanMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function() { PopupMenu.PopupBaseMenuItem.prototype._init.call(this); this.label = new St.Label({ text: _("Rescan for wireless networks") }); this.addActor(this.label); this.actor.label_actor = this.label; }, activate: function(event) { PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event, true); } }; function MyApplet(metadata, orientation, panel_height, instance_id) { this._init(metadata, orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(metadata, orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.metadata = metadata; Main.systrayManager.registerRole("network", metadata.uuid); Main.systrayManager.registerRole("nm-applet", metadata.uuid); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this._currentIconName = undefined; this._setIcon('network-offline'); this._client = NMClient.Client.new(); this._statusSection = new PopupMenu.PopupMenuSection(); this._statusItem = new PopupMenu.PopupMenuItem('', { style_class: 'popup-inactive-menu-item', reactive: false }); this._statusSection.addMenuItem(this._statusItem); this._statusSection.addAction(_("Enable networking"), Lang.bind(this, function() { this._client.networking_enabled = true; })); this._statusSection.actor.hide(); this.menu.addMenuItem(this._statusSection); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._devices = { }; this._devices.wired = { section: new PopupMenu.PopupMenuSection(), devices: [ ], item: new NMWiredSectionTitleMenuItem(_("Wired")) }; this._devices.wired.section.addMenuItem(this._devices.wired.item); this._devices.wired.section.actor.hide(); this.menu.addMenuItem(this._devices.wired.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._devices.wireless = { section: new PopupMenu.PopupMenuSection(), devices: [ ], item: this._makeToggleItem('wireless', _("Wireless")) }; this._devices.wireless.section.addMenuItem(this._devices.wireless.item); this._devices.wireless.section.actor.hide(); this.menu.addMenuItem(this._devices.wireless.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._devices.wwan = { section: new PopupMenu.PopupMenuSection(), devices: [ ], item: this._makeToggleItem('wwan', _("Mobile broadband")) }; this._devices.wwan.section.addMenuItem(this._devices.wwan.item); this._devices.wwan.section.actor.hide(); this.menu.addMenuItem(this._devices.wwan.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._devices.vpn = { section: new PopupMenu.PopupMenuSection(), device: new NMDeviceVPN(this._client), item: new NMWiredSectionTitleMenuItem(_("VPN Connections")) }; this._devices.vpn.device.connect('active-connection-changed', Lang.bind(this, function() { this._devices.vpn.item.updateForDevice(this._devices.vpn.device); })); this._devices.vpn.item.updateForDevice(this._devices.vpn.device); this._devices.vpn.section.addMenuItem(this._devices.vpn.item); this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section); this._devices.vpn.section.actor.hide(); this.menu.addMenuItem(this._devices.vpn.section); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.rescan_item = new RescanMenuItem(); this.rescan_item.connect("activate", Lang.bind(this, function() { let devices = this._devices.wireless.devices; for (let i = 0; i < devices.length; i++) { devices[i].device.request_scan_simple(null); } })); this.menu.addMenuItem(this.rescan_item); this.rescan_item.actor.hide(); this.menu.addSettingsAction(_("Network Settings"), 'network'); this.menu.addAction(_("Network Connections"), Lang.bind(this, function() { Util.spawnCommandLine("nm-connection-editor"); })); this._activeConnections = [ ]; this._connections = [ ]; this._mainConnection = null; // Device types this._dtypes = { }; this._dtypes[NetworkManager.DeviceType.ETHERNET] = NMDeviceWired; this._dtypes[NetworkManager.DeviceType.WIFI] = NMDeviceWireless; this._dtypes[NetworkManager.DeviceType.MODEM] = NMDeviceModem; this._dtypes[NetworkManager.DeviceType.BT] = NMDeviceBluetooth; // TODO: WiMax support // Connection types this._ctypes = { }; this._ctypes[NetworkManager.SETTING_WIRELESS_SETTING_NAME] = NMConnectionCategory.WIRELESS; this._ctypes[NetworkManager.SETTING_WIRED_SETTING_NAME] = NMConnectionCategory.WIRED; this._ctypes[NetworkManager.SETTING_PPPOE_SETTING_NAME] = NMConnectionCategory.WIRED; this._ctypes[NetworkManager.SETTING_PPP_SETTING_NAME] = NMConnectionCategory.WIRED; this._ctypes[NetworkManager.SETTING_BLUETOOTH_SETTING_NAME] = NMConnectionCategory.WWAN; this._ctypes[NetworkManager.SETTING_CDMA_SETTING_NAME] = NMConnectionCategory.WWAN; this._ctypes[NetworkManager.SETTING_GSM_SETTING_NAME] = NMConnectionCategory.WWAN; this._ctypes[NetworkManager.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN; this._settings = NMClient.RemoteSettings.new(null); this._connectionsReadId = this._settings.connect('connections-read', Lang.bind(this, function() { this._readConnections(); this._readDevices(); this._syncNMState(); // Connect to signals late so that early signals don't find in inconsistent state // and connect only once (this signal handler can be called again if NetworkManager goes up and down) if (!this._inited) { this._inited = true; this._client.connect('notify::manager-running', Lang.bind(this, this._syncNMState)); this._client.connect('notify::networking-enabled', Lang.bind(this, this._syncNMState)); this._client.connect('notify::state', Lang.bind(this, this._syncNMState)); this._client.connect('notify::active-connections', Lang.bind(this, this._updateIcon)); this._client.connect('device-added', Lang.bind(this, this._deviceAdded)); this._client.connect('device-removed', Lang.bind(this, this._deviceRemoved)); this._settings.connect('new-connection', Lang.bind(this, this._newConnection)); } })); this._periodicUpdateIcon(); } catch (e) { global.logError(e); } }, _setIcon: function(name) { if (this._currentIconName !== name) { this.set_applet_icon_symbolic_name(name); this._currentIconName = name; } }, on_applet_clicked: function(event) { this.menu.toggle(); }, _ensureSource: function() { if (!this._source) { this._source = new NMMessageTraySource(); this._source.connect('destroy', Lang.bind(this, function() { this._source = null; })); if (Main.messageTray) Main.messageTray.add(this._source); } }, _makeToggleItem: function(type, title) { let item = new NMWirelessSectionTitleMenuItem(this._client, type, title); item.connect('enabled-changed', Lang.bind(this, function(item, enabled) { let devices = this._devices[type].devices; devices.forEach(function(dev) { dev.setEnabled(enabled); }); this._syncSectionTitle(type); })); return item; }, _syncSectionTitle: function(category) { let devices = this._devices[category].devices; let item = this._devices[category].item; let section = this._devices[category].section; if (devices.length == 0) section.actor.hide(); else { section.actor.show(); if (devices.length == 1) { let dev = devices[0]; dev.statusItem.actor.hide(); item.updateForDevice(dev); } else { devices.forEach(function(dev) { dev.statusItem.actor.show(); }); // remove status text from the section title item item.updateForDevice(null); } } let show_rescan = false; if (this._devices.wireless.devices.length > 0) { let devices = this._devices.wireless.devices; for (let i = 0; i < devices.length; i++) { if (devices[i]._client.wireless_get_enabled()) { show_rescan = true; break; } } } this.rescan_item.actor.visible = show_rescan; }, _readDevices: function() { let devices = this._client.get_devices() || [ ]; for (let i = 0; i < devices.length; ++i) { this._deviceAdded(this._client, devices[i]); } }, _notifyForDevice: function(device, iconName, title, text, urgency) { if (device._notification) device._notification.destroy(); /* must call after destroying previous notification, or this._source will be cleared */ this._ensureSource(); let icon = new St.Icon({ icon_name: iconName, icon_type: St.IconType.SYMBOLIC, icon_size: this._source.ICON_SIZE }); device._notification = new MessageTray.Notification(this._source, title, text, { icon: icon }); device._notification.setUrgency(urgency); device._notification.setTransient(true); device._notification.connect('destroy', function() { device._notification = null; }); this._source.notify(device._notification); }, _deviceAdded: function(client, device) { if (device._delegate) { // already seen, not adding again return; } let wrapperClass = this._dtypes[device.get_device_type()]; if (wrapperClass) { let wrapper = new wrapperClass(this._client, device, this._connections); wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) { // XXX: nm-applet has no special text depending on reason // but I'm not sure of this generic message this._notifyForDevice(device, 'network-error', _("Connection failed"), _("Activation of network connection failed"), MessageTray.Urgency.HIGH); })); wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) { this._syncSectionTitle(dev.category); })); wrapper._destroyId = wrapper.connect('destroy', function(wrapper) { wrapper.disconnect(wrapper._activationFailedId); wrapper.disconnect(wrapper._deviceStateChangedId); wrapper.disconnect(wrapper._destroyId); }); let section = this._devices[wrapper.category].section; let devices = this._devices[wrapper.category].devices; section.addMenuItem(wrapper.section, 1); section.addMenuItem(wrapper.statusItem, 1); devices.push(wrapper); this._syncSectionTitle(wrapper.category); } else log('Invalid network device type, is ' + device.get_device_type()); }, _deviceRemoved: function(client, device) { if (!device._delegate) { log('Removing a network device that was not added'); return; } let wrapper = device._delegate; wrapper.destroy(); let devices = this._devices[wrapper.category].devices; let pos = devices.indexOf(wrapper); devices.splice(pos, 1); this._syncSectionTitle(wrapper.category); }, _syncActiveConnections: function() { let closedConnections = [ ]; let newActiveConnections = this._client.get_active_connections() || [ ]; for (let i = 0; i < this._activeConnections.length; i++) { let a = this._activeConnections[i]; if (newActiveConnections.indexOf(a) == -1) // connection is removed closedConnections.push(a); } for (let i = 0; i < closedConnections.length; i++) { let active = closedConnections[i]; if (active._primaryDevice) { active._primaryDevice.setActiveConnection(null); active._primaryDevice = null; } if (active._inited) { active.disconnect(active._notifyStateId); //active.disconnect(active._notifyDefaultId); //active.disconnect(active._notifyDefault6Id); active._inited = false; } } this._activeConnections = newActiveConnections; this._mainConnection = null; let activating = null; let activated = null; let default_ip4 = null; let default_ip6 = null; for (let i = 0; i < this._activeConnections.length; i++) { let a = this._activeConnections[i]; if (!a._inited) { //a._notifyDefaultId = a.connect('notify::default', Lang.bind(this, this._updateIcon)); //a._notifyDefault6Id = a.connect('notify::default6', Lang.bind(this, this._updateIcon)); a._notifyStateId = a.connect('notify::state', Lang.bind(this, this._notifyActivated)); a._inited = true; } if (!a._connection) { a._connection = this._settings.get_connection_by_path(a.connection); if (a._connection) { a._type = a._connection._type; a._section = this._ctypes[a._type]; if (a._errorLogged) { log('network applet: Found connection for active'); a._errorLogged = false; } } else { a._connection = null; a._type = null; a._section = null; if (!a._errorLogged) { a._errorLogged = true; log('network applet: Cannot find connection for active (or connection cannot be read)'); } } } if (!a._section){ // Do not take connections which section is undefined into account // For instance, in Mint 18, when the "vpn" is "activated", we sometimes see a "tun" act as the default ipv4 connection. continue; } if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED) { if (!default_ip4) { // We didn't find the default IPV4 device yet.. if (!default_ip6) { // We didn't find the default IPV6 device either so consider this one. activated = a; } else { // We already found the default IPV6 device, so only use this one if it's the default IPV4 device if (a['default']) { activated = a; } } } } if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING) { activating = a; } if (a['default']) { default_ip4 = a; } if (a.default6) { default_ip6 = a; } if (!a._primaryDevice) { if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) { // find a good device to be considered primary a._primaryDevice = null; let devices = a.get_devices() || [ ]; for (let j = 0; j < devices.length; j++) { let d = devices[j]; if (d._delegate) { a._primaryDevice = d._delegate; break; } } } else a._primaryDevice = this._devices.vpn.device; if (a._primaryDevice) a._primaryDevice.setActiveConnection(a); if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED && a._primaryDevice && a._primaryDevice._notification) { a._primaryDevice._notification.destroy(); a._primaryDevice._notification = null; } } } this._mainConnection = activated || activating || default_ip4 || default_ip6 || null; }, _notifyActivated: function(activeConnection) { if (activeConnection.state == NetworkManager.ActiveConnectionState.ACTIVATED && activeConnection._primaryDevice && activeConnection._primaryDevice._notification) { activeConnection._primaryDevice._notification.destroy(); activeConnection._primaryDevice._notification = null; } this._updateIcon(); }, _readConnections: function() { let connections = this._settings.list_connections(); for (let i = 0; i < connections.length; i++) { let connection = connections[i]; if (connection._uuid) { // connection was already seen (for example because NetworkManager was restarted) continue; } connection._removedId = connection.connect('removed', Lang.bind(this, this._connectionRemoved)); connection._updatedId = connection.connect('updated', Lang.bind(this, this._updateConnection)); this._updateConnection(connection); this._connections.push(connection); } }, _newConnection: function(settings, connection) { if (connection._uuid) { // connection was already seen return; } connection._removedId = connection.connect('removed', Lang.bind(this, this._connectionRemoved)); connection._updatedId = connection.connect('updated', Lang.bind(this, this._updateConnection)); this._updateConnection(connection); this._connections.push(connection); this._updateIcon(); }, _connectionRemoved: function(connection) { let pos = this._connections.indexOf(connection); if (pos != -1) this._connections.splice(pos); let section = connection._section; if (section == NMConnectionCategory.VPN) { this._devices.vpn.device.removeConnection(connection); if (this._devices.vpn.device.empty) this._devices.vpn.section.actor.hide(); } else if (section != NMConnectionCategory.INVALID) { let devices = this._devices[section].devices; for (let i = 0; i < devices.length; i++) devices[i].removeConnection(connection); } connection._uuid = null; connection.disconnect(connection._removedId); connection.disconnect(connection._updatedId); }, _updateConnection: function(connection) { let connectionSettings = connection.get_setting_by_name(NetworkManager.SETTING_CONNECTION_SETTING_NAME); connection._type = connectionSettings.type; connection._section = this._ctypes[connection._type] || NMConnectionCategory.INVALID; connection._name = connectionSettings.id; connection._uuid = connectionSettings.uuid; connection._timestamp = connectionSettings.timestamp; let section = connection._section; if (connection._section == NMConnectionCategory.INVALID) return; if (section == NMConnectionCategory.VPN) { this._devices.vpn.device.checkConnection(connection); this._devices.vpn.section.actor.show(); } else { let devices = this._devices[section].devices; for (let i = 0; i < devices.length; i++) { devices[i].checkConnection(connection); } } }, _hideDevices: function() { this._devicesHidden = true; for (let category in this._devices) this._devices[category].section.actor.hide(); }, _showNormal: function() { if (!this._devicesHidden) // nothing to do return; this._devicesHidden = false; this._statusSection.actor.hide(); this._syncSectionTitle('wired'); this._syncSectionTitle('wireless'); this._syncSectionTitle('wwan'); if (!this._devices.vpn.device.empty) this._devices.vpn.section.actor.show(); }, _syncNMState: function() { if (!this._client.manager_running) { log('NetworkManager is not running, hiding...'); this.menu.close(); this.actor.hide(); return; } else this.actor.show(); if (!this._client.networking_enabled) { this._setIcon('network-offline'); this._hideDevices(); this._statusItem.label.text = _("Networking is disabled"); this._statusSection.actor.show(); return; } this._showNormal(); this._updateIcon(); }, _updateIcon: function() { try { this._updateFrequencySeconds = DEFAULT_PERIODIC_UPDATE_FREQUENCY_SECONDS; this._syncActiveConnections(); let mc = this._mainConnection; if (!mc) { this._setIcon('network-offline'); this.set_applet_tooltip(_("No connection")); } else if (mc.state == NetworkManager.ActiveConnectionState.ACTIVATING) { this._updateFrequencySeconds = FAST_PERIODIC_UPDATE_FREQUENCY_SECONDS; switch (mc._section) { case NMConnectionCategory.WWAN: this._setIcon('network-cellular-acquiring'); this.set_applet_tooltip(_("Connecting to the cellular network...")); break; case NMConnectionCategory.WIRELESS: this._setIcon('network-wireless-acquiring'); this.set_applet_tooltip(_("Connecting to the wireless network...")); break; case NMConnectionCategory.WIRED: this._setIcon('network-wired-acquiring'); this.set_applet_tooltip(_("Connecting to the wired network...")); break; case NMConnectionCategory.VPN: this._setIcon('network-vpn-acquiring'); this.set_applet_tooltip(_("Connecting to the VPN...")); break; default: // fallback to a generic connected icon // (it could be a private connection of some other user) this._setIcon('network-wired-acquiring'); this.set_applet_tooltip(_("Connecting to the network...")); } } else { let dev; switch (mc._section) { case NMConnectionCategory.WIRELESS: dev = mc._primaryDevice; if (dev) { let ap = dev.device.active_access_point; let mode = dev.device.mode; if (!ap) { if (mode != NM80211Mode.ADHOC) { log('An active wireless connection, in infrastructure mode, involves no access point?'); break; } this._setIcon('network-wireless-connected'); this.set_applet_tooltip(_("Connected to the wireless network")); } else { this._setIcon('network-wireless-signal-' + signalToIcon(ap.strength)); this.set_applet_tooltip(_("Wireless connection") + ": " + ap.get_ssid() + " ("+ ap.strength +"%)"); } } else { log('Active connection with no primary device?'); } break; case NMConnectionCategory.WIRED: this._setIcon('network-wired'); this.set_applet_tooltip(_("Connected to the wired network")); break; case NMConnectionCategory.WWAN: dev = mc._primaryDevice; if (!dev) { log('Active connection with no primary device?'); break; } if (!dev.mobileDevice) { // this can happen for bluetooth in PAN mode this._setIcon('network-cellular-connected'); this.set_applet_tooltip(_("Connected to the cellular network")); break; } this._setIcon('network-cellular-signal-' + signalToIcon(dev.mobileDevice.signal_quality)); this.set_applet_tooltip(_("Connected to the cellular network")); break; case NMConnectionCategory.VPN: this._setIcon('network-vpn'); this.set_applet_tooltip(_("Connected to the VPN")); break; default: // fallback to a generic connected icon // (it could be a private connection of some other user) this._setIcon('network-wired'); this.set_applet_tooltip(_("Connected to the network")); break; } } } catch (e) { global.logError(e); } }, _periodicUpdateIcon: function() { this._updateIcon(); this._updateFrequencySeconds = Math.max(2, this._updateFrequencySeconds); this._periodicTimeoutId = Mainloop.timeout_add_seconds(this._updateFrequencySeconds, Lang.bind(this, this._periodicUpdateIcon)); }, on_applet_removed_from_panel: function() { Main.systrayManager.unregisterRole("network", this.metadata.uuid); Main.systrayManager.unregisterRole("nm-applet", this.metadata.uuid); if (this._periodicTimeoutId){ Mainloop.source_remove(this._periodicTimeoutId); } }, }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(metadata, orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/menu@cinnamon.org/0000775000175000017500000000000013215735076024072 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/menu@cinnamon.org/settings-schema.json0000664000175000017500000000763113215735076030072 0ustar fabiofabio{ "layout" : { "type" : "layout", "pages" : ["panel", "menu"], "panel" : { "type" : "page", "title" : "Panel", "sections" : ["panel-appear", "panel-behave"] }, "menu" : { "type" : "page", "title" : "Menu", "sections" : ["menu-layout", "menu-behave"] }, "panel-appear" : { "type" : "section", "title" : "Appearance", "keys" : ["menu-icon-custom", "menu-icon", "menu-label"] }, "panel-behave" : { "type" : "section", "title" : "Behavior", "keys" : ["overlay-key", "activate-on-hover", "hover-delay", "enable-animation"] }, "menu-layout" : { "type" : "section", "title" : "Layout and content", "keys" : ["show-category-icons", "show-application-icons", "favbox-show", "show-places", "menu-editor-button"] }, "menu-behave" : { "type" : "section", "title" : "Behavior", "keys" : ["enable-autoscroll", "search-filesystem"] } }, "overlay-key" : { "type" : "keybinding", "description" : "Keyboard shortcut to open and close the menu", "default" : "Super_L::Super_R" }, "menu-icon-custom" : { "type" : "switch", "default" : false, "description" : "Use a custom icon", "tooltip" : "Unchecking this allows the theme to set the icon" }, "menu-icon" : { "type" : "iconfilechooser", "default" : "/usr/share/cinnamon/theme/menu-symbolic.svg", "description" : "Icon", "tooltip" : "Select an icon to show in the panel.", "dependency" : "menu-icon-custom", "indent" : "true" }, "menu-label" : { "type" : "entry", "default" : "Menu", "description" : "Text", "tooltip" : "Enter custom text to show in the panel." }, "show-category-icons" : { "type" : "switch", "default" : true, "description" : "Show category icons", "tooltip" : "Choose whether or not to show icons on categories." }, "show-application-icons" : { "type" : "switch", "default" : true, "description" : "Show application icons", "tooltip" : "Choose whether or not to show icons on applications." }, "favbox-show" : { "type" : "switch", "default" : true, "description" : "Show favorites and quit options", "tooltip" : "Choose whether or not to show the left pane of the menu." }, "show-places" : { "type" : "switch", "default" : true, "description": "Show bookmarks and places", "tooltip": "Choose whether or not to show bookmarks and places in the menu." }, "enable-autoscroll" : { "type" : "switch", "default" : true, "description": "Enable autoscrolling in application list", "tooltip": "Choose whether or not to enable smooth autoscrolling in the application list." }, "search-filesystem" : { "type" : "switch", "default" : false, "description": "Enable filesystem path entry in search box", "tooltip": "Allows path entry in the menu search box." }, "activate-on-hover" : { "type" : "switch", "default" : false, "description": "Open the menu when I move my mouse over it", "tooltip": "Enable opening the menu when the mouse enters the applet" }, "hover-delay" : { "type": "spinbutton", "default" : 0, "min" : 0, "max" : 1000, "step" : 50, "units" : "milliseconds", "dependency" : "activate-on-hover", "description" : "Menu hover delay", "tooltip" : "Delay before the menu opens when hovered" }, "enable-animation" : { "type": "switch", "default": false, "description": "Use menu animations", "tooltip": "Allow the menu to animate on open and close" }, "menu-editor-button" : { "type" : "button", "description" : "Open the menu editor", "callback" : "_launch_editor", "tooltip" : "Press this button to customize your menu entries." } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/menu@cinnamon.org/metadata.json0000664000175000017500000000021513215735076026543 0ustar fabiofabio{ "uuid": "menu@cinnamon.org", "name": "Menu", "description": "Main Cinnamon menu", "icon": "applications-other", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/menu@cinnamon.org/applet.js0000664000175000017500000041373013215735076025725 0ustar fabiofabioconst Applet = imports.ui.applet; const Mainloop = imports.mainloop; const CMenu = imports.gi.CMenu; const Lang = imports.lang; const Cinnamon = imports.gi.Cinnamon; const St = imports.gi.St; const Clutter = imports.gi.Clutter; const Main = imports.ui.main; const MessageTray = imports.ui.messageTray; const PopupMenu = imports.ui.popupMenu; const AppFavorites = imports.ui.appFavorites; const Gtk = imports.gi.Gtk; const Atk = imports.gi.Atk; const Gio = imports.gi.Gio; const GnomeSession = imports.misc.gnomeSession; const ScreenSaver = imports.misc.screenSaver; const FileUtils = imports.misc.fileUtils; const Util = imports.misc.util; const DND = imports.ui.dnd; const Meta = imports.gi.Meta; const DocInfo = imports.misc.docInfo; const GLib = imports.gi.GLib; const Settings = imports.ui.settings; const Pango = imports.gi.Pango; const SearchProviderManager = imports.ui.searchProviderManager; const MAX_FAV_ICON_SIZE = 32; const CATEGORY_ICON_SIZE = 22; const APPLICATION_ICON_SIZE = 22; const INITIAL_BUTTON_LOAD = 30; const MAX_BUTTON_WIDTH = "max-width: 20em;"; const USER_DESKTOP_PATH = FileUtils.getUserDesktopDir(); const PRIVACY_SCHEMA = "org.cinnamon.desktop.privacy"; const REMEMBER_RECENT_KEY = "remember-recent-files"; let appsys = Cinnamon.AppSystem.get_default(); /* VisibleChildIterator takes a container (boxlayout, etc.) * and creates an array of its visible children and their index * positions. We can then work through that list without * mucking about with positions and math, just give a * child, and it'll give you the next or previous, or first or * last child in the list. * * We could have this object regenerate off a signal * every time the visibles have changed in our applicationBox, * but we really only need it when we start keyboard * navigating, so increase speed, we reload only when we * want to use it. */ function VisibleChildIterator(container) { this._init(container); } VisibleChildIterator.prototype = { _init: function(container) { this.container = container; this.reloadVisible(); }, reloadVisible: function() { this.array = this.container.get_focus_chain() .filter(x => !(x._delegate instanceof PopupMenu.PopupSeparatorMenuItem)); }, getNextVisible: function(curChild) { return this.getVisibleItem(this.array.indexOf(curChild) + 1); }, getPrevVisible: function(curChild) { return this.getVisibleItem(this.array.indexOf(curChild) - 1); }, getFirstVisible: function() { return this.array[0]; }, getLastVisible: function() { return this.array[this.array.length - 1]; }, getVisibleIndex: function(curChild) { return this.array.indexOf(curChild); }, getVisibleItem: function(index) { let len = this.array.length; index = ((index % len) + len) % len; return this.array[index]; }, getNumVisibleChildren: function() { return this.array.length; }, getAbsoluteIndexOfChild: function(child) { return this.container.get_children().indexOf(child); } }; function ApplicationContextMenuItem(appButton, label, action, iconName) { this._init(appButton, label, action, iconName); } ApplicationContextMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function (appButton, label, action, iconName) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {focusOnHover: false}); this._appButton = appButton; this._action = action; this.label = new St.Label({ text: label }); if (iconName != null) { this.icon = new St.Icon({ icon_name: iconName, icon_size: 12, icon_type: St.IconType.SYMBOLIC }); if (this.icon) { this.addActor(this.icon); this.icon.realize(); } } this.addActor(this.label); }, activate: function (event) { switch (this._action){ case "add_to_panel": { if (!Main.AppletManager.get_role_provider_exists(Main.AppletManager.Roles.PANEL_LAUNCHER)) { let new_applet_id = global.settings.get_int("next-applet-id"); global.settings.set_int("next-applet-id", (new_applet_id + 1)); let enabled_applets = global.settings.get_strv("enabled-applets"); enabled_applets.push("panel1:right:0:panel-launchers@cinnamon.org:" + new_applet_id); global.settings.set_strv("enabled-applets", enabled_applets); } let launcherApplet = Main.AppletManager.get_role_provider(Main.AppletManager.Roles.PANEL_LAUNCHER); launcherApplet.acceptNewLauncher(this._appButton.app.get_id()); this._appButton.toggleMenu(); break; } case "add_to_desktop": { let file = Gio.file_new_for_path(this._appButton.app.get_app_info().get_filename()); let destFile = Gio.file_new_for_path(USER_DESKTOP_PATH+"/"+this._appButton.app.get_id()); try{ file.copy(destFile, 0, null, function(){}); FileUtils.changeModeGFile(destFile, 755); }catch(e){ global.log(e); } this._appButton.toggleMenu(); break; } case "add_to_favorites": { AppFavorites.getAppFavorites().addFavorite(this._appButton.app.get_id()); this._appButton.toggleMenu(); break; } case "remove_from_favorites": { AppFavorites.getAppFavorites().removeFavorite(this._appButton.app.get_id()); this._appButton.toggleMenu(); break; } case "uninstall": { Util.spawnCommandLine("gksu -m '" + _("Please provide your password to uninstall this application") + "' /usr/bin/cinnamon-remove-application '" + this._appButton.app.get_app_info().get_filename() + "'"); this._appButton.appsMenuButton.menu.close(); break; } case "run_with_nvidia_gpu": { Util.spawnCommandLine("optirun gtk-launch " + this._appButton.app.get_id()); this._appButton.appsMenuButton.menu.close(); break; } } return false; } }; function GenericApplicationButton(appsMenuButton, app) { this._init(appsMenuButton, app); } GenericApplicationButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(appsMenuButton, app, withMenu) { this.app = app; this.appsMenuButton = appsMenuButton; PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.withMenu = withMenu; if (this.withMenu){ this.menu = new PopupMenu.PopupSubMenu(this.actor); this.menu.actor.set_style_class_name('menu-context-menu'); this.menu.connect('open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged)); } }, highlight: function() { this.actor.add_style_pseudo_class('highlighted'); }, unhighlight: function() { var app_key = this.app.get_id(); if (app_key == null) { app_key = this.app.get_name() + ":" + this.app.get_description(); } this.appsMenuButton._knownApps.push(app_key); this.actor.remove_style_pseudo_class('highlighted'); }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button()==1){ this.activate(event); } if (event.get_button()==3){ this.activateContextMenus(event); } return true; }, activate: function(event) { this.unhighlight(); this.app.open_new_window(-1); this.appsMenuButton.menu.close(); }, activateContextMenus: function(event) { if (this.withMenu && !this.menu.isOpen) this.appsMenuButton.closeContextMenus(this.app, true); this.toggleMenu(); }, closeMenu: function() { if (this.withMenu) this.menu.close(); }, toggleMenu: function() { if (!this.withMenu) return; if (!this.menu.isOpen){ let children = this.menu.box.get_children(); for (var i in children) { this.menu.box.remove_actor(children[i]); } let menuItem; menuItem = new ApplicationContextMenuItem(this, _("Add to panel"), "add_to_panel", "list-add"); this.menu.addMenuItem(menuItem); if (USER_DESKTOP_PATH){ menuItem = new ApplicationContextMenuItem(this, _("Add to desktop"), "add_to_desktop", "computer"); this.menu.addMenuItem(menuItem); } if (AppFavorites.getAppFavorites().isFavorite(this.app.get_id())){ menuItem = new ApplicationContextMenuItem(this, _("Remove from favorites"), "remove_from_favorites", "starred"); this.menu.addMenuItem(menuItem); }else{ menuItem = new ApplicationContextMenuItem(this, _("Add to favorites"), "add_to_favorites", "non-starred"); this.menu.addMenuItem(menuItem); } if (this.appsMenuButton._canUninstallApps) { menuItem = new ApplicationContextMenuItem(this, _("Uninstall"), "uninstall", "edit-delete"); this.menu.addMenuItem(menuItem); } if (this.appsMenuButton._isBumblebeeInstalled) { menuItem = new ApplicationContextMenuItem(this, _("Run with NVIDIA GPU"), "run_with_nvidia_gpu", "cpu"); this.menu.addMenuItem(menuItem); } } this.menu.toggle(); }, _subMenuOpenStateChanged: function() { if (this.menu.isOpen) { this.appsMenuButton._activeContextMenuParent = this; this.appsMenuButton._scrollToButton(this.menu); } else { this.appsMenuButton._activeContextMenuItem = null; this.appsMenuButton._activeContextMenuParent = null; } }, get _contextIsOpen() { return this.menu.isOpen; }, destroy: function() { this.label.destroy(); if (this.icon) { this.icon.destroy(); } if (this.withMenu) { this.menu.destroy(); } PopupMenu.PopupBaseMenuItem.prototype.destroy.call(this); } }; function TransientButton(appsMenuButton, pathOrCommand) { this._init(appsMenuButton, pathOrCommand); } TransientButton.prototype = { __proto__: PopupMenu.PopupSubMenuMenuItem.prototype, _init: function(appsMenuButton, pathOrCommand) { let displayPath = pathOrCommand; if (pathOrCommand.charAt(0) == '~') { pathOrCommand = pathOrCommand.slice(1); pathOrCommand = GLib.get_home_dir() + pathOrCommand; } this.isPath = pathOrCommand.substr(pathOrCommand.length - 1) == '/'; if (this.isPath) { this.path = pathOrCommand; } else { let n = pathOrCommand.lastIndexOf('/'); if (n != 1) { this.path = pathOrCommand.substr(0, n); } } this.pathOrCommand = pathOrCommand; this.appsMenuButton = appsMenuButton; PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); // We need this fake app to help appEnterEvent/appLeaveEvent // work with our search result. this.app = { get_app_info: { get_filename: function() { return pathOrCommand; } }, get_id: function() { return -1; }, get_description: function() { return this.pathOrCommand; }, get_name: function() { return ''; } }; this.file = Gio.file_new_for_path(this.pathOrCommand); try { this.handler = this.file.query_default_handler(null); let contentType = Gio.content_type_guess(this.pathOrCommand, null); let themedIcon = Gio.content_type_get_icon(contentType[0]); this.icon = new St.Icon({gicon: themedIcon, icon_size: APPLICATION_ICON_SIZE, icon_type: St.IconType.FULLCOLOR }); this.actor.set_style_class_name('menu-application-button'); } catch (e) { this.handler = null; let iconName = this.isPath ? 'folder' : 'unknown'; this.icon = new St.Icon({icon_name: iconName, icon_size: APPLICATION_ICON_SIZE, icon_type: St.IconType.FULLCOLOR,}); // @todo Would be nice to indicate we don't have a handler for this file. this.actor.set_style_class_name('menu-application-button'); } this.addActor(this.icon); this.label = new St.Label({ text: displayPath, style_class: 'menu-application-button-label' }); this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END; this.label.set_style(MAX_BUTTON_WIDTH); this.addActor(this.label); this.isDraggableApp = false; }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button()==1){ this.activate(event); } return true; }, activate: function(event) { if (this.handler != null) { this.handler.launch([this.file], null); } else { // Try anyway, even though we probably shouldn't. try { Util.spawn(['gvfs-open', this.file.get_uri()]); } catch (e) { global.logError("No handler available to open " + this.file.get_uri()); } } this.appsMenuButton.menu.close(); } }; function ApplicationButton(appsMenuButton, app, showIcon) { this._init(appsMenuButton, app, showIcon); } ApplicationButton.prototype = { __proto__: GenericApplicationButton.prototype, _init: function(appsMenuButton, app, showIcon) { GenericApplicationButton.prototype._init.call(this, appsMenuButton, app, true); this.category = []; this.actor.set_style_class_name('menu-application-button'); if (showIcon) { this.icon = this.app.create_icon_texture(APPLICATION_ICON_SIZE); this.addActor(this.icon); } this.name = this.app.get_name(); this.label = new St.Label({ text: this.name, style_class: 'menu-application-button-label' }); this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END; this.label.set_style(MAX_BUTTON_WIDTH); this.addActor(this.label); this._draggable = DND.makeDraggable(this.actor); this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd)); this.isDraggableApp = true; this.actor.label_actor = this.label; if (showIcon) { this.icon.realize(); } this.label.realize(); }, get_app_id: function() { return this.app.get_id(); }, getDragActor: function() { let favorites = AppFavorites.getAppFavorites().getFavorites(); let nbFavorites = favorites.length; let monitorHeight = Main.layoutManager.primaryMonitor.height; let real_size = (0.7 * monitorHeight) / nbFavorites; let icon_size = 0.6 * real_size / global.ui_scale; if (icon_size > MAX_FAV_ICON_SIZE) icon_size = MAX_FAV_ICON_SIZE; return this.app.create_icon_texture(icon_size); }, // Returns the original actor that should align with the actor // we show as the item is being dragged. getDragActorSource: function() { return this.actor; }, _onDragEnd: function() { this.appsMenuButton.favoritesBox._delegate._clearDragPlaceholder(); } }; function SearchProviderResultButton(appsMenuButton, provider, result) { this._init(appsMenuButton, provider, result); } SearchProviderResultButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(appsMenuButton, provider, result) { this.provider = provider; this.result = result; this.appsMenuButton = appsMenuButton; PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.actor.set_style_class_name('menu-application-button'); // We need this fake app to help appEnterEvent/appLeaveEvent // work with our search result. this.app = { get_app_info: { get_filename: function() { return result.id; } }, get_id: function() { return -1; }, get_description: function() { return result.description; }, get_name: function() { return result.label; } }; this.icon = null; if (result.icon){ this.icon = result.icon; }else if (result.icon_app){ this.icon = result.icon_app.create_icon_texture(APPLICATION_ICON_SIZE); }else if (result.icon_filename){ this.icon = new St.Icon({gicon: new Gio.FileIcon({file: Gio.file_new_for_path(result.icon_filename)}), icon_size: APPLICATION_ICON_SIZE}); } if (this.icon){ this.addActor(this.icon); } this.label = new St.Label({ text: result.label, style_class: 'menu-application-button-label' }); this.addActor(this.label); this.isDraggableApp = false; if (this.icon) { this.icon.realize(); } this.label.realize(); }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button() == 1){ this.activate(event); } return true; }, activate: function(event) { try{ this.provider.on_result_selected(this.result); this.appsMenuButton.menu.close(); } catch(e) { global.logError(e); } } }; function PlaceButton(appsMenuButton, place, button_name, showIcon) { this._init(appsMenuButton, place, button_name, showIcon); } PlaceButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(appsMenuButton, place, button_name, showIcon) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.appsMenuButton = appsMenuButton; this.place = place; this.button_name = button_name; this.actor.set_style_class_name('menu-application-button'); this.actor._delegate = this; this.label = new St.Label({ text: this.button_name, style_class: 'menu-application-button-label' }); this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END; this.label.set_style(MAX_BUTTON_WIDTH); if (showIcon) { this.icon = place.iconFactory(APPLICATION_ICON_SIZE); if (!this.icon) this.icon = new St.Icon({icon_name: "folder", icon_size: APPLICATION_ICON_SIZE, icon_type: St.IconType.FULLCOLOR}); if (this.icon) this.addActor(this.icon); } this.addActor(this.label); if (showIcon) this.icon.realize(); this.label.realize(); }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button()==1){ this.place.launch(); this.appsMenuButton.menu.close(); } }, activate: function(event) { this.place.launch(); this.appsMenuButton.menu.close(); } }; function RecentContextMenuItem(recentButton, label, is_default, callback) { this._init(recentButton, label, is_default, callback); } RecentContextMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function (recentButton, label, is_default, callback) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {focusOnHover: false}); this._recentButton = recentButton; this._callback = callback; this.label = new St.Label({ text: label }); this.addActor(this.label); if (is_default) this.label.style = "font-weight: bold;"; }, activate: function (event) { this._callback(); return false; } }; function RecentButton(appsMenuButton, file, showIcon) { this._init(appsMenuButton, file, showIcon); } RecentButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(appsMenuButton, file, showIcon) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.mimeType = file.mimeType; this.uri = file.uri; this.uriDecoded = file.uriDecoded; this.appsMenuButton = appsMenuButton; this.button_name = file.name; this.menu = null; this.actor.set_style_class_name('menu-application-button'); this.actor._delegate = this; this.label = new St.Label({ text: this.button_name, style_class: 'menu-application-button-label' }); this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END; this.label.set_style(MAX_BUTTON_WIDTH); if (showIcon) { this.icon = file.createIcon(APPLICATION_ICON_SIZE); this.addActor(this.icon); } this.addActor(this.label); if (showIcon) this.icon.realize(); this.label.realize(); }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button()==1){ this.activate(event); } if (event.get_button()==3){ this.activateContextMenus(event); } return true; }, activate: function(event) { try { Gio.app_info_launch_default_for_uri(this.uri, global.create_app_launch_context()); this.appsMenuButton.menu.close(); } catch (e) { let source = new MessageTray.SystemNotificationSource(); Main.messageTray.add(source); let notification = new MessageTray.Notification(source, _("This file is no longer available"), e.message); notification.setTransient(true); notification.setUrgency(MessageTray.Urgency.NORMAL); source.notify(notification); } }, activateContextMenus: function(event) { let menu = this.appsMenuButton.recentContextMenu; if (menu != null && menu.sourceActor._delegate != this) this.appsMenuButton.closeContextMenus(this, true); this.toggleMenu(); }, closeMenu: function() { this.menu = null; this.menu.close(); }, hasLocalPath: function(file) { return file.is_native() || file.get_path() != null; }, toggleMenu: function() { if (this.appsMenuButton.recentContextMenu == null) { this.appsMenuButton.createRecentContextMenu(this.actor); } let menu = this.appsMenuButton.recentContextMenu; this.menu = menu; if (!menu.isOpen) { let parent = menu.actor.get_parent(); if (parent != null) { parent.remove_child(menu.actor); } menu.sourceActor = this.actor; this.actor.get_parent().insert_child_above(menu.actor, this.actor); let children = menu.box.get_children(); for (var i in children) { menu.box.remove_actor(children[i]); } let menuItem; menuItem = new PopupMenu.PopupMenuItem(_("Open with"), { reactive: false }); menuItem.actor.style = "font-weight: bold"; menu.addMenuItem(menuItem); let file = Gio.File.new_for_uri(this.uri); let default_info = Gio.AppInfo.get_default_for_type(this.mimeType, !this.hasLocalPath(file)); if (default_info) { menuItem = new RecentContextMenuItem(this, default_info.get_display_name(), false, Lang.bind(this, function() { default_info.launch([file], null, null); this.toggleMenu(); this.appsMenuButton.menu.close(); })); menu.addMenuItem(menuItem); } let infos = Gio.AppInfo.get_all_for_type(this.mimeType); for (let i = 0; i < infos.length; i++) { let info = infos[i]; file = Gio.File.new_for_uri(this.uri); if (!this.hasLocalPath(file) && !info.supports_uris()) continue; if (info.equal(default_info)) continue; menuItem = new RecentContextMenuItem(this, info.get_display_name(), false, Lang.bind(this, function() { info.launch([file], null, null); this.toggleMenu(); this.appsMenuButton.menu.close(); })); menu.addMenuItem(menuItem); } if (GLib.find_program_in_path ("nemo-open-with") != null) { menuItem = new RecentContextMenuItem(this, _("Other application..."), false, Lang.bind(this, function() { Util.spawnCommandLine("nemo-open-with " + this.uri); this.toggleMenu(); this.appsMenuButton.menu.close(); })); menu.addMenuItem(menuItem); } } this.appsMenuButton.recentContextMenu.toggle(); }, get _contextIsOpen() { return this.menu != null && this.menu.isOpen; }, destroy: function() { this.file = null; this.appsMenuButton = null; this.label.destroy(); if (this.icon) this.icon.destroy(); PopupMenu.PopupBaseMenuItem.prototype.destroy.call(this); }, }; function NoRecentDocsButton(label, icon, reactive, callback) { this._init(label, icon, reactive, callback); } NoRecentDocsButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(label, icon, reactive, callback) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.actor.set_style_class_name('menu-application-button'); this.actor._delegate = this; this.button_name = ""; this.label = new St.Label({ text: label, style_class: 'menu-application-button-label' }); this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END; this.label.set_style(MAX_BUTTON_WIDTH); if (icon != null) { let icon_actor = new St.Icon({ icon_name: icon, icon_type: St.IconType.FULLCOLOR, icon_size: APPLICATION_ICON_SIZE}); this.addActor(icon_actor); } this.addActor(this.label); this.label.realize(); this.actor.reactive = reactive; this.callback = callback; }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button() == 1) { this.callback(); } } }; function RecentClearButton(appsMenuButton) { this._init(appsMenuButton); } RecentClearButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(appsMenuButton) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.appsMenuButton = appsMenuButton; this.actor.set_style_class_name('menu-application-button'); this.button_name = _("Clear list"); this.actor._delegate = this; this.label = new St.Label({ text: this.button_name, style_class: 'menu-application-button-label' }); this.icon = new St.Icon({ icon_name: 'edit-clear', icon_type: St.IconType.SYMBOLIC, icon_size: APPLICATION_ICON_SIZE }); this.addActor(this.icon); this.addActor(this.label); }, _onButtonReleaseEvent: function (actor, event) { if (event.get_button()==1){ this.activate(event); } }, activate: function(event) { this.appsMenuButton.menu.close(); let GtkRecent = new Gtk.RecentManager(); GtkRecent.purge_items(); } }; function CategoryButton(app, showIcon) { this._init(app, showIcon); } CategoryButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(category, showIcon) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.actor.set_style_class_name('menu-category-button'); var label; let icon = null; if (category) { if (showIcon) { icon = category.get_icon(); if (icon && icon.get_names) this.icon_name = icon.get_names().toString(); else this.icon_name = ""; } else { this.icon_name = ""; } label = category.get_name(); } else label = _("All Applications"); this.actor._delegate = this; this.label = new St.Label({ text: label, style_class: 'menu-category-button-label' }); if (category && this.icon_name) { this.icon = new St.Icon({gicon: icon, icon_size: CATEGORY_ICON_SIZE, icon_type: St.IconType.FULLCOLOR}); if (this.icon) { this.addActor(this.icon); this.icon.realize(); } } this.actor.accessible_role = Atk.Role.LIST_ITEM; this.addActor(this.label); this.label.realize(); } }; function PlaceCategoryButton(app, showIcon) { this._init(app, showIcon); } PlaceCategoryButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(category, showIcon) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.actor.set_style_class_name('menu-category-button'); this.actor._delegate = this; this.label = new St.Label({ text: _("Places"), style_class: 'menu-category-button-label' }); if (showIcon) { this.icon = new St.Icon({icon_name: "folder", icon_size: CATEGORY_ICON_SIZE, icon_type: St.IconType.FULLCOLOR}); this.addActor(this.icon); this.icon.realize(); } else { this.icon = null; } this.addActor(this.label); this.label.realize(); } }; function RecentCategoryButton(app, showIcon) { this._init(app, showIcon); } RecentCategoryButton.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(category, showIcon) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.actor.set_style_class_name('menu-category-button'); this.actor._delegate = this; this.label = new St.Label({ text: _("Recent Files"), style_class: 'menu-category-button-label' }); if (showIcon) { this.icon = new St.Icon({icon_name: "folder-recent", icon_size: CATEGORY_ICON_SIZE, icon_type: St.IconType.FULLCOLOR}); this.addActor(this.icon); this.icon.realize(); } else { this.icon = null; } this.addActor(this.label); this.label.realize(); } }; function FavoritesButton(appsMenuButton, app, nbFavorites) { this._init(appsMenuButton, app, nbFavorites); } FavoritesButton.prototype = { __proto__: GenericApplicationButton.prototype, _init: function(appsMenuButton, app, nbFavorites) { GenericApplicationButton.prototype._init.call(this, appsMenuButton, app); let monitorHeight = Main.layoutManager.primaryMonitor.height; let real_size = (0.7 * monitorHeight) / nbFavorites; let icon_size = 0.6 * real_size / global.ui_scale; if (icon_size > MAX_FAV_ICON_SIZE) icon_size = MAX_FAV_ICON_SIZE; this.actor.style = "padding-top: "+(icon_size / 3)+"px;padding-bottom: "+(icon_size / 3)+"px;"; this.actor.add_style_class_name('menu-favorites-button'); let icon = app.create_icon_texture(icon_size); this.addActor(icon); icon.realize(); this._draggable = DND.makeDraggable(this.actor); this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd)); this.isDraggableApp = true; }, _onDragEnd: function() { this.actor.get_parent()._delegate._clearDragPlaceholder(); }, get_app_id: function() { return this.app.get_id(); }, getDragActor: function() { return new Clutter.Clone({ source: this.actor }); }, // Returns the original actor that should align with the actor // we show as the item is being dragged. getDragActorSource: function() { return this.actor; } }; function SystemButton(appsMenuButton, icon, nbFavorites, name, desc) { this._init(appsMenuButton, icon, nbFavorites, name, desc); } SystemButton.prototype = { __proto__: PopupMenu.PopupSubMenuMenuItem.prototype, _init: function(appsMenuButton, icon, nbFavorites, name, desc) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this, {hover: false}); this.name = name; this.desc = desc; let monitorHeight = Main.layoutManager.primaryMonitor.height; let real_size = (0.7 * monitorHeight) / nbFavorites; let icon_size = 0.6 * real_size / global.ui_scale; if (icon_size > MAX_FAV_ICON_SIZE) icon_size = MAX_FAV_ICON_SIZE; this.actor.style = "padding-top: "+(icon_size / 3)+"px;padding-bottom: "+(icon_size / 3)+"px;"; this.actor.add_style_class_name('menu-favorites-button'); let iconObj = new St.Icon({icon_name: icon, icon_size: icon_size, icon_type: St.IconType.FULLCOLOR}); this.addActor(iconObj); iconObj.realize(); }, _onButtonReleaseEvent: function(actor, event) { if (event.get_button() == 1) { this.activate(); } } }; function CategoriesApplicationsBox() { this._init(); } CategoriesApplicationsBox.prototype = { _init: function() { this.actor = new St.BoxLayout(); this.actor._delegate = this; }, acceptDrop : function(source, actor, x, y, time) { if (source instanceof FavoritesButton){ source.actor.destroy(); actor.destroy(); AppFavorites.getAppFavorites().removeFavorite(source.app.get_id()); return true; } return false; }, handleDragOver : function(source, actor, x, y, time) { if (source instanceof FavoritesButton) return global.set_cursor(Cinnamon.Cursor.POINTING_HAND); return DND.DragMotionResult.CONTINUE; } }; function FavoritesBox() { this._init(); } FavoritesBox.prototype = { _init: function() { this.actor = new St.BoxLayout({ vertical: true }); this.actor._delegate = this; this._dragPlaceholder = null; this._dragPlaceholderPos = -1; this._animatingPlaceholdersCount = 0; }, _clearDragPlaceholder: function() { if (this._dragPlaceholder) { this._dragPlaceholder.animateOutAndDestroy(); this._dragPlaceholder = null; this._dragPlaceholderPos = -1; } }, handleDragOver : function(source, actor, x, y, time) { let app = source.app; let favorites = AppFavorites.getAppFavorites().getFavorites(); let numFavorites = favorites.length; let favPos = favorites.indexOf(app); let children = this.actor.get_children(); let numChildren = children.length; let boxHeight = this.actor.height; // Keep the placeholder out of the index calculation; assuming that // the remove target has the same size as "normal" items, we don't // need to do the same adjustment there. if (this._dragPlaceholder) { boxHeight -= this._dragPlaceholder.actor.height; numChildren--; } let pos = Math.round(y * numChildren / boxHeight); if (pos != this._dragPlaceholderPos && pos <= numFavorites) { if (this._animatingPlaceholdersCount > 0) { let appChildren = children.filter(function(actor) { return (actor._delegate instanceof FavoritesButton); }); this._dragPlaceholderPos = children.indexOf(appChildren[pos]); } else { this._dragPlaceholderPos = pos; } // Don't allow positioning before or after self if (favPos != -1 && (pos == favPos || pos == favPos + 1)) { if (this._dragPlaceholder) { this._dragPlaceholder.animateOutAndDestroy(); this._animatingPlaceholdersCount++; this._dragPlaceholder.actor.connect('destroy', Lang.bind(this, function() { this._animatingPlaceholdersCount--; })); } this._dragPlaceholder = null; return DND.DragMotionResult.CONTINUE; } // If the placeholder already exists, we just move // it, but if we are adding it, expand its size in // an animation let fadeIn; if (this._dragPlaceholder) { this._dragPlaceholder.actor.destroy(); fadeIn = false; } else { fadeIn = true; } this._dragPlaceholder = new DND.GenericDragPlaceholderItem(); this._dragPlaceholder.child.set_width (source.actor.height); this._dragPlaceholder.child.set_height (source.actor.height); this.actor.insert_child_at_index(this._dragPlaceholder.actor, this._dragPlaceholderPos); if (fadeIn) this._dragPlaceholder.animateIn(); } let id = app.get_id(); let favoritesMap = AppFavorites.getAppFavorites().getFavoriteMap(); let srcIsFavorite = (id in favoritesMap); if (!srcIsFavorite) return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.MOVE_DROP; }, // Draggable target interface acceptDrop : function(source, actor, x, y, time) { let app = source.app; let id = app.get_id(); let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); let srcIsFavorite = (id in favorites); let favPos = 0; let children = this.actor.get_children(); for (let i = 0; i < this._dragPlaceholderPos; i++) { if (this._dragPlaceholder && children[i] == this._dragPlaceholder.actor) continue; if (!(children[i]._delegate instanceof FavoritesButton)) continue; let childId = children[i]._delegate.app.get_id(); if (childId == id) continue; if (childId in favorites) favPos++; } Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function () { let appFavorites = AppFavorites.getAppFavorites(); if (srcIsFavorite) appFavorites.moveFavoriteToPos(id, favPos); else appFavorites.addFavoriteAtPos(id, favPos); return false; })); return true; } }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); this.initial_load_done = false; this.set_applet_tooltip(_("Menu")); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.orientation = orientation; this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress)); this.settings = new Settings.AppletSettings(this, "menu@cinnamon.org", instance_id); this.settings.bind("show-places", "showPlaces", this._refreshBelowApps); this._appletEnterEventId = 0; this._appletLeaveEventId = 0; this._appletHoverDelayId = 0; this.settings.bind("hover-delay", "hover_delay_ms", this._updateActivateOnHover); this.settings.bind("activate-on-hover", "activateOnHover", this._updateActivateOnHover); this._updateActivateOnHover(); this.menu.setCustomStyleClass('menu-background'); this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged)); this.settings.bind("menu-icon-custom", "menuIconCustom", this._updateIconAndLabel); this.settings.bind("menu-icon", "menuIcon", this._updateIconAndLabel); this.settings.bind("menu-label", "menuLabel", this._updateIconAndLabel); this.settings.bind("overlay-key", "overlayKey", this._updateKeybinding); this.settings.bind("show-category-icons", "showCategoryIcons", this._refreshAll); this.settings.bind("show-application-icons", "showApplicationIcons", this._refreshAll); this.settings.bind("favbox-show", "favBoxShow", this._favboxtoggle); this.settings.bind("enable-animation", "enableAnimation", null); this._updateKeybinding(); Main.themeManager.connect("theme-set", Lang.bind(this, this._updateIconAndLabel)); this._updateIconAndLabel(); this._searchInactiveIcon = new St.Icon({ style_class: 'menu-search-entry-icon', icon_name: 'edit-find', icon_type: St.IconType.SYMBOLIC }); this._searchActiveIcon = new St.Icon({ style_class: 'menu-search-entry-icon', icon_name: 'edit-clear', icon_type: St.IconType.SYMBOLIC }); this._searchIconClickedId = 0; this._applicationsButtons = []; this._applicationsButtonFromApp = {}; this._favoritesButtons = []; this._placesButtons = []; this._transientButtons = []; this.recentButton = null; this._recentButtons = []; this._categoryButtons = []; this._searchProviderButtons = []; this._selectedItemIndex = null; this._previousSelectedActor = null; this._previousVisibleIndex = null; this._previousTreeSelectedActor = null; this._activeContainer = null; this._activeActor = null; this._applicationsBoxWidth = 0; this.menuIsOpening = false; this._knownApps = []; // Used to keep track of apps that are already installed, so we can highlight newly installed ones this._appsWereRefreshed = false; this._canUninstallApps = GLib.file_test("/usr/bin/cinnamon-remove-application", GLib.FileTest.EXISTS); this._isBumblebeeInstalled = GLib.file_test("/usr/bin/optirun", GLib.FileTest.EXISTS); this.RecentManager = new DocInfo.DocManager(); this.privacy_settings = new Gio.Settings( {schema_id: PRIVACY_SCHEMA} ); this.noRecentDocuments = true; this._activeContextMenuParent = null; this._activeContextMenuItem = null; this._display(); appsys.connect('installed-changed', Lang.bind(this, this.onAppSysChanged)); AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._refreshFavs)); Main.placesManager.connect('places-updated', Lang.bind(this, this._refreshBelowApps)); this.RecentManager.connect('changed', Lang.bind(this, this._refreshRecent)); this.privacy_settings.connect("changed::" + REMEMBER_RECENT_KEY, Lang.bind(this, this._refreshRecent)); this._fileFolderAccessActive = false; this._pathCompleter = new Gio.FilenameCompleter(); this._pathCompleter.set_dirs_only(false); this.lastAcResults = []; this.settings.bind("search-filesystem", "searchFilesystem"); this.refreshing = false; // used as a flag to know if we're currently refreshing (so we don't do it more than once concurrently) this.recentContextMenu = null; this.appsContextMenu = null; this.lastSelectedCategory = null; // We shouldn't need to call refreshAll() here... since we get a "icon-theme-changed" signal when CSD starts. // The reason we do is in case the Cinnamon icon theme is the same as the one specificed in GTK itself (in .config) // In that particular case we get no signal at all. this._refreshAll(); this.set_show_label_in_vertical_panels(false); }, _updateKeybinding: function() { Main.keybindingManager.addHotKey("overlay-key-" + this.instance_id, this.overlayKey, Lang.bind(this, function() { if (!Main.overview.visible && !Main.expo.visible) this.menu.toggle_with_options(this.enableAnimation); })); }, onAppSysChanged: function() { if (this.refreshing == false) { this.refreshing = true; Mainloop.timeout_add_seconds(1, Lang.bind(this, this._refreshAll)); } }, _refreshAll: function() { try { this._refreshApps(); this._refreshFavs(); this._refreshPlaces(); this._refreshRecent(); this._resizeApplicationsBox(); } catch (exception) { global.log(exception); } this.refreshing = false; }, _refreshBelowApps: function() { this._refreshPlaces(); this._refreshRecent(); this._resizeApplicationsBox(); }, openMenu: function() { if (!this._applet_context_menu.isOpen) { this.menu.open(this.enableAnimation); } }, _clearDelayCallbacks: function() { if (this._appletHoverDelayId > 0) { Mainloop.source_remove(this._appletHoverDelayId); this._appletHoverDelayId = 0; } if (this._appletLeaveEventId > 0) { this.actor.disconnect(this._appletLeaveEventId); this._appletLeaveEventId = 0; } return false; }, _updateActivateOnHover: function() { if (this._appletEnterEventId > 0) { this.actor.disconnect(this._appletEnterEventId); this._appletEnterEventId = 0; } this._clearDelayCallbacks(); if (this.activateOnHover) { this._appletEnterEventId = this.actor.connect('enter-event', Lang.bind(this, function() { if (this.hover_delay_ms > 0) { this._appletLeaveEventId = this.actor.connect('leave-event', Lang.bind(this, this._clearDelayCallbacks)); this._appletHoverDelayId = Mainloop.timeout_add(this.hover_delay_ms, Lang.bind(this, function() { this.openMenu(); this._clearDelayCallbacks(); })); } else { this.openMenu(); } })); } }, _recalc_height: function() { let scrollBoxHeight = (this.leftBox.get_allocation_box().y2-this.leftBox.get_allocation_box().y1) - (this.searchBox.get_allocation_box().y2-this.searchBox.get_allocation_box().y1); this.applicationsScrollBox.style = "height: "+scrollBoxHeight / global.ui_scale +"px;"; }, on_orientation_changed: function (orientation) { this.orientation = orientation; this.menu.destroy(); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this.menu.setCustomStyleClass('menu-background'); this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged)); this._display(); if (this.initial_load_done) this._refreshAll(); this._updateIconAndLabel(); }, on_applet_added_to_panel: function () { this.initial_load_done = true; }, on_applet_removed_from_panel: function () { Main.keybindingManager.removeHotKey("overlay-key-" + this.instance_id); }, _launch_editor: function() { Util.spawnCommandLine("cinnamon-menu-editor"); }, on_applet_clicked: function(event) { this.menu.toggle_with_options(this.enableAnimation); }, _onSourceKeyPress: function(actor, event) { let symbol = event.get_key_symbol(); if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) { this.menu.toggle(); return true; } else if (symbol == Clutter.KEY_Escape && this.menu.isOpen) { this.menu.close(); return true; } else if (symbol == Clutter.KEY_Down) { if (!this.menu.isOpen) this.menu.toggle(); this.menu.actor.navigate_focus(this.actor, Gtk.DirectionType.DOWN, false); return true; } else return false; }, _onOpenStateChanged: function(menu, open) { if (open) { if (this._appletEnterEventId > 0) { this.actor.handler_block(this._appletEnterEventId); } this.menuIsOpening = true; this.actor.add_style_pseudo_class('active'); global.stage.set_key_focus(this.searchEntry); this._selectedItemIndex = null; this._activeContainer = null; this._activeActor = null; this.lastSelectedCategory = null; let n = Math.min(this._applicationsButtons.length, INITIAL_BUTTON_LOAD); for (let i = 0; i < n; i++) { this._applicationsButtons[i].actor.show(); } this._allAppsCategoryButton.actor.style_class = "menu-category-button-selected"; Mainloop.idle_add(Lang.bind(this, this._initial_cat_selection, n)); } else { if (this._appletEnterEventId > 0) { this.actor.handler_unblock(this._appletEnterEventId); } this.actor.remove_style_pseudo_class('active'); if (this.searchActive) { this.resetSearch(); } this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); this._previousTreeSelectedActor = null; this._previousSelectedActor = null; this.closeContextMenus(null, false); this._clearAllSelections(true); this.destroyVectorBox(); } }, _initial_cat_selection: function (start_index) { let n = this._applicationsButtons.length; for (let i = start_index; i < n; i++) { this._applicationsButtons[i].actor.show(); } }, destroy: function() { this.actor._delegate = null; this.menu.destroy(); this.actor.destroy(); this.emit('destroy'); }, _set_default_menu_icon: function() { let path = global.datadir + "/theme/menu.svg"; if (GLib.file_test(path, GLib.FileTest.EXISTS)) { this.set_applet_icon_path(path); return; } path = global.datadir + "/theme/menu-symbolic.svg"; if (GLib.file_test(path, GLib.FileTest.EXISTS)) { this.set_applet_icon_symbolic_path(path); return; } /* If all else fails, this will yield no icon */ this.set_applet_icon_path(""); }, _favboxtoggle: function() { if (!this.favBoxShow) { this.leftPane.hide(); } else { this.leftPane.show(); } }, _updateIconAndLabel: function(){ try { if (this.menuIconCustom) { if (this.menuIcon == "") { this.set_applet_icon_name(""); } else if (GLib.path_is_absolute(this.menuIcon) && GLib.file_test(this.menuIcon, GLib.FileTest.EXISTS)) { if (this.menuIcon.search("-symbolic") != -1) this.set_applet_icon_symbolic_path(this.menuIcon); else this.set_applet_icon_path(this.menuIcon); } else if (Gtk.IconTheme.get_default().has_icon(this.menuIcon)) { if (this.menuIcon.search("-symbolic") != -1) this.set_applet_icon_symbolic_name(this.menuIcon); else this.set_applet_icon_name(this.menuIcon); } } else { this._set_default_menu_icon(); } } catch(e) { global.logWarning("Could not load icon file \""+this.menuIcon+"\" for menu button"); } if (this.menuIconCustom && this.menuIcon == "") { this._applet_icon_box.hide(); } else { this._applet_icon_box.show(); } if (this.orientation == St.Side.LEFT || this.orientation == St.Side.RIGHT) // no menu label if in a vertical panel { this.set_applet_label(""); } else { if (this.menuLabel != "") this.set_applet_label(_(this.menuLabel)); else this.set_applet_label(""); } }, _recentMenuOpenStateChanged: function(recentContextMenu) { if (recentContextMenu.isOpen) { this._activeContextMenuParent = recentContextMenu.sourceActor._delegate; this._scrollToButton(recentContextMenu); } else { this._activeContextMenuItem = null; this._activeContextMenuParent = null; for (let item in this._recentButtons) { if (this._recentButtons[item].menu) { this._recentButtons[item].menu = null; } } } }, createRecentContextMenu: function(actor) { let menu = new PopupMenu.PopupSubMenu(actor); menu.actor.set_style_class_name('menu-context-menu'); menu.connect('open-state-changed', Lang.bind(this, this._recentMenuOpenStateChanged)); this.recentContextMenu = menu; }, _navigateContextMenu: function(button, symbol, ctrlKey) { if (symbol === Clutter.KEY_Menu || symbol === Clutter.Escape || (ctrlKey && (symbol === Clutter.KEY_Return || symbol === Clutter.KP_Enter))) { button.activateContextMenus(); return; } let minIndex = 0; let goUp = symbol === Clutter.KEY_Up; let nextActive = null; let menuItems = button.menu._getMenuItems(); // The context menu items // The first context menu item of a RecentButton is used just as a label. // So remove it from the iteration. if (button && button instanceof RecentButton) { minIndex = 1; } let menuItemsLength = menuItems.length; switch (symbol) { case Clutter.KEY_Page_Up: this._activeContextMenuItem = menuItems[minIndex]; this._activeContextMenuItem.setActive(true); return; case Clutter.KEY_Page_Down: this._activeContextMenuItem = menuItems[menuItemsLength - 1]; this._activeContextMenuItem.setActive(true); return; } if (!this._activeContextMenuItem) { if (symbol === Clutter.KEY_Return || symbol === Clutter.KP_Enter) { button.activate(); } else { this._activeContextMenuItem = menuItems[goUp ? menuItemsLength - 1 : minIndex]; this._activeContextMenuItem.setActive(true); } return; } else if (this._activeContextMenuItem && (symbol === Clutter.KEY_Return || symbol === Clutter.KP_Enter)) { this._activeContextMenuItem.activate(); this._activeContextMenuItem = null; return; } for (let i = minIndex; i < menuItemsLength; i++) { if (menuItems[i] === this._activeContextMenuItem) { let nextActiveIndex = (goUp ? i - 1 : i + 1); if (nextActiveIndex < minIndex) { nextActiveIndex = menuItemsLength - 1; } else if (nextActiveIndex > menuItemsLength - 1) { nextActiveIndex = minIndex; } nextActive = menuItems[nextActiveIndex]; nextActive.setActive(true); this._activeContextMenuItem = nextActive; break; } } }, _onMenuKeyPress: function(actor, event) { let symbol = event.get_key_symbol(); let item_actor; let index = 0; this.appBoxIter.reloadVisible(); this.catBoxIter.reloadVisible(); this.favBoxIter.reloadVisible(); let keyCode = event.get_key_code(); let modifierState = Cinnamon.get_event_state(event); /* check for a keybinding and quit early, otherwise we get a double hit of the keybinding callback */ let action = global.display.get_keybinding_action(keyCode, modifierState); if (action == Meta.KeyBindingAction.CUSTOM) { return true; } index = this._selectedItemIndex; let ctrlKey = modifierState & Clutter.ModifierType.CONTROL_MASK; // If a context menu is open, hijack keyboard navigation and concentrate on the context menu. if (this._activeContextMenuParent && this._activeContextMenuParent._contextIsOpen && this._activeContainer === this.applicationsBox && (this._activeContextMenuParent instanceof ApplicationButton || this._activeContextMenuParent instanceof RecentButton)) { let continueNavigation = false; switch (symbol) { case Clutter.KEY_Up: case Clutter.KEY_Down: case Clutter.KEY_Return: case Clutter.KP_Enter: case Clutter.KEY_Menu: case Clutter.KEY_Page_Up: case Clutter.KEY_Page_Down: case Clutter.Escape: this._navigateContextMenu(this._activeContextMenuParent, symbol, ctrlKey); break; case Clutter.KEY_Right: case Clutter.KEY_Left: case Clutter.Tab: case Clutter.ISO_Left_Tab: continueNavigation = true; break; } if (!continueNavigation) return true; } let navigationKey = true; let whichWay = "none"; switch (symbol) { case Clutter.KEY_Up: whichWay = "up"; if (this._activeContainer === this.favoritesBox && ctrlKey && (this.favoritesBox.get_child_at_index(index))._delegate instanceof FavoritesButton) navigationKey = false; break; case Clutter.KEY_Down: whichWay = "down"; if (this._activeContainer === this.favoritesBox && ctrlKey && (this.favoritesBox.get_child_at_index(index))._delegate instanceof FavoritesButton) navigationKey = false; break; case Clutter.KEY_Page_Up: whichWay = "top"; break; case Clutter.KEY_Page_Down: whichWay = "bottom"; break; case Clutter.KEY_Right: if (!this.searchActive) whichWay = "right"; if (this._activeContainer === this.applicationsBox) whichWay = "none"; else if (this._activeContainer === this.categoriesBox && this.noRecentDocuments && (this.categoriesBox.get_child_at_index(index))._delegate instanceof RecentCategoryButton) whichWay = "none"; break; case Clutter.KEY_Left: if (!this.searchActive) whichWay = "left"; if (this._activeContainer === this.favoritesBox) whichWay = "none"; else if (!this.favBoxShow && (this._activeContainer === this.categoriesBox || this._activeContainer === null)) whichWay = "none"; break; case Clutter.Tab: if (!this.searchActive) whichWay = "right"; else navigationKey = false; break; case Clutter.ISO_Left_Tab: if (!this.searchActive) whichWay = "left"; else navigationKey = false; break; default: navigationKey = false; } if (navigationKey) { switch (this._activeContainer) { case null: switch (whichWay) { case "up": this._activeContainer = this.categoriesBox; item_actor = this.catBoxIter.getLastVisible(); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "down": this._activeContainer = this.categoriesBox; item_actor = this.catBoxIter.getFirstVisible(); item_actor = this.catBoxIter.getNextVisible(item_actor); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "right": this._activeContainer = this.applicationsBox; item_actor = this.appBoxIter.getFirstVisible(); this._scrollToButton(item_actor._delegate); break; case "left": if (this.favBoxShow) { this._activeContainer = this.favoritesBox; item_actor = this.favBoxIter.getFirstVisible(); } else { this._activeContainer = this.applicationsBox; item_actor = this.appBoxIter.getFirstVisible(); this._scrollToButton(item_actor._delegate); } break; case "top": this._activeContainer = this.categoriesBox; item_actor = this.catBoxIter.getFirstVisible(); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "bottom": this._activeContainer = this.categoriesBox; item_actor = this.catBoxIter.getLastVisible(); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; } break; case this.categoriesBox: switch (whichWay) { case "up": this._previousTreeSelectedActor = this.categoriesBox.get_child_at_index(index); this._previousTreeSelectedActor._delegate.isHovered = false; item_actor = this.catBoxIter.getPrevVisible(this._activeActor); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "down": this._previousTreeSelectedActor = this.categoriesBox.get_child_at_index(index); this._previousTreeSelectedActor._delegate.isHovered = false; item_actor = this.catBoxIter.getNextVisible(this._activeActor); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "right": if ((this.categoriesBox.get_child_at_index(index))._delegate instanceof RecentCategoryButton && this.noRecentDocuments) { if(this.favBoxShow) { this._previousSelectedActor = this.categoriesBox.get_child_at_index(index); item_actor = this.favBoxIter.getFirstVisible(); } else { item_actor = this.categoriesBox.get_child_at_index(index); } } else { item_actor = (this._previousVisibleIndex != null) ? this.appBoxIter.getVisibleItem(this._previousVisibleIndex) : this.appBoxIter.getFirstVisible(); } break; case "left": if(this.favBoxShow) { this._previousSelectedActor = this.categoriesBox.get_child_at_index(index); item_actor = this.favBoxIter.getFirstVisible(); } else { if ((this.categoriesBox.get_child_at_index(index))._delegate instanceof RecentCategoryButton && this.noRecentDocuments) { item_actor = this.categoriesBox.get_child_at_index(index); } else { item_actor = (this._previousVisibleIndex != null) ? this.appBoxIter.getVisibleItem(this._previousVisibleIndex) : this.appBoxIter.getFirstVisible(); } } break; case "top": this._previousTreeSelectedActor = this.categoriesBox.get_child_at_index(index); this._previousTreeSelectedActor._delegate.isHovered = false; item_actor = this.catBoxIter.getFirstVisible(); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; case "bottom": this._previousTreeSelectedActor = this.categoriesBox.get_child_at_index(index); this._previousTreeSelectedActor._delegate.isHovered = false; item_actor = this.catBoxIter.getLastVisible(); this._scrollToButton(this.appBoxIter.getFirstVisible()._delegate); break; } break; case this.applicationsBox: switch (whichWay) { case "up": this._previousSelectedActor = this.applicationsBox.get_child_at_index(index); item_actor = this.appBoxIter.getPrevVisible(this._previousSelectedActor); this._previousVisibleIndex = this.appBoxIter.getVisibleIndex(item_actor); this._scrollToButton(item_actor._delegate); break; case "down": this._previousSelectedActor = this.applicationsBox.get_child_at_index(index); item_actor = this.appBoxIter.getNextVisible(this._previousSelectedActor); this._previousVisibleIndex = this.appBoxIter.getVisibleIndex(item_actor); this._scrollToButton(item_actor._delegate); break; case "right": this._previousSelectedActor = this.applicationsBox.get_child_at_index(index); item_actor = (this._previousTreeSelectedActor != null) ? this._previousTreeSelectedActor : this.catBoxIter.getFirstVisible(); this._previousTreeSelectedActor = item_actor; index = item_actor.get_parent()._vis_iter.getAbsoluteIndexOfChild(item_actor); if (this.favBoxShow) { item_actor._delegate.emit('enter-event'); this._previousSelectedActor = this.categoriesBox.get_child_at_index(index); item_actor = this.favBoxIter.getFirstVisible(); } break; case "left": this._previousSelectedActor = this.applicationsBox.get_child_at_index(index); item_actor = (this._previousTreeSelectedActor != null) ? this._previousTreeSelectedActor : this.catBoxIter.getFirstVisible(); this._previousTreeSelectedActor = item_actor; break; case "top": item_actor = this.appBoxIter.getFirstVisible(); this._previousVisibleIndex = this.appBoxIter.getVisibleIndex(item_actor); this._scrollToButton(item_actor._delegate); break; case "bottom": item_actor = this.appBoxIter.getLastVisible(); this._previousVisibleIndex = this.appBoxIter.getVisibleIndex(item_actor); this._scrollToButton(item_actor._delegate); break; } break; case this.favoritesBox: switch (whichWay) { case "up": this._previousSelectedActor = this.favoritesBox.get_child_at_index(index); item_actor = this.favBoxIter.getPrevVisible(this._previousSelectedActor); break; case "down": this._previousSelectedActor = this.favoritesBox.get_child_at_index(index); item_actor = this.favBoxIter.getNextVisible(this._previousSelectedActor); break; case "right": item_actor = (this._previousTreeSelectedActor != null) ? this._previousTreeSelectedActor : this.catBoxIter.getFirstVisible(); this._previousTreeSelectedActor = item_actor; break; case "left": item_actor = (this._previousTreeSelectedActor != null) ? this._previousTreeSelectedActor : this.catBoxIter.getFirstVisible(); this._previousTreeSelectedActor = item_actor; index = item_actor.get_parent()._vis_iter.getAbsoluteIndexOfChild(item_actor); item_actor._delegate.emit('enter-event'); item_actor = (this._previousVisibleIndex != null) ? this.appBoxIter.getVisibleItem(this._previousVisibleIndex) : this.appBoxIter.getFirstVisible(); break; case "top": item_actor = this.favBoxIter.getFirstVisible(); break; case "bottom": item_actor = this.favBoxIter.getLastVisible(); break; } break; default: break; } if (!item_actor) return false; index = item_actor.get_parent()._vis_iter.getAbsoluteIndexOfChild(item_actor); } else { if (this._activeContainer !== this.categoriesBox && (symbol === Clutter.KEY_Return || symbol === Clutter.KP_Enter)) { if (!ctrlKey) { item_actor = this._activeContainer.get_child_at_index(this._selectedItemIndex); item_actor._delegate.activate(); } else if (ctrlKey && this._activeContainer === this.applicationsBox) { item_actor = this.applicationsBox.get_child_at_index(this._selectedItemIndex); if (item_actor._delegate instanceof ApplicationButton || item_actor._delegate instanceof RecentButton) item_actor._delegate.activateContextMenus(); } return true; } else if (this._activeContainer === this.applicationsBox && symbol === Clutter.KEY_Menu) { item_actor = this.applicationsBox.get_child_at_index(this._selectedItemIndex); if (item_actor._delegate instanceof ApplicationButton || item_actor._delegate instanceof RecentButton) item_actor._delegate.activateContextMenus(); return true; } else if (this._activeContainer === this.favoritesBox && symbol === Clutter.Delete) { item_actor = this.favoritesBox.get_child_at_index(this._selectedItemIndex); if (item_actor._delegate instanceof FavoritesButton) { let favorites = AppFavorites.getAppFavorites().getFavorites(); let numFavorites = favorites.length; AppFavorites.getAppFavorites().removeFavorite(item_actor._delegate.app.get_id()); item_actor._delegate.toggleMenu(); if (this._selectedItemIndex == (numFavorites-1)) item_actor = this.favoritesBox.get_child_at_index(this._selectedItemIndex-1); else item_actor = this.favoritesBox.get_child_at_index(this._selectedItemIndex); } } else if (this._activeContainer === this.favoritesBox && (symbol === Clutter.KEY_Down || symbol === Clutter.KEY_Up) && ctrlKey && (this.favoritesBox.get_child_at_index(index))._delegate instanceof FavoritesButton) { item_actor = this.favoritesBox.get_child_at_index(this._selectedItemIndex); let id = item_actor._delegate.app.get_id(); let appFavorites = AppFavorites.getAppFavorites(); let favorites = appFavorites.getFavorites(); let numFavorites = favorites.length; let favPos = 0; if (this._selectedItemIndex == (numFavorites-1) && symbol === Clutter.KEY_Down) favPos = 0; else if (this._selectedItemIndex == 0 && symbol === Clutter.KEY_Up) favPos = numFavorites-1; else if (symbol === Clutter.KEY_Down) favPos = this._selectedItemIndex + 1; else favPos = this._selectedItemIndex - 1; appFavorites.moveFavoriteToPos(id, favPos); item_actor = this.favoritesBox.get_child_at_index(favPos); } else if (this.searchFilesystem && (this._fileFolderAccessActive || symbol === Clutter.slash)) { if (symbol === Clutter.Return || symbol === Clutter.KP_Enter) { if (this._run(this.searchEntry.get_text())) { this.menu.close(); } return true; } if (symbol === Clutter.Escape) { this.searchEntry.set_text(''); this._fileFolderAccessActive = false; } if (symbol === Clutter.slash) { // Need preload data before get completion. GFilenameCompleter load content of parent directory. // Parent directory for /usr/include/ is /usr/. So need to add fake name('a'). let text = this.searchEntry.get_text().concat('/a'); let prefix; if (text.lastIndexOf(' ') == -1) prefix = text; else prefix = text.substr(text.lastIndexOf(' ') + 1); this._getCompletion(prefix); return false; } if (symbol === Clutter.Tab) { let text = actor.get_text(); let prefix; if (text.lastIndexOf(' ') == -1) prefix = text; else prefix = text.substr(text.lastIndexOf(' ') + 1); let postfix = this._getCompletion(prefix); if (postfix != null && postfix.length > 0) { actor.insert_text(postfix, -1); actor.set_cursor_position(text.length + postfix.length); if (postfix[postfix.length - 1] == '/') this._getCompletion(text + postfix + 'a'); } return true; } if (symbol === Clutter.ISO_Left_Tab) { return true; } return false; } else if (symbol === Clutter.Tab || symbol === Clutter.ISO_Left_Tab) { return true; } else { return false; } } this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); this._selectedItemIndex = index; if (!item_actor || item_actor === this.searchEntry) { return false; } item_actor._delegate.emit('enter-event'); return true; }, _addEnterEvent: function(button, callback) { let _callback = Lang.bind(this, function() { let parent = button.actor.get_parent(); if (this._activeContainer === this.categoriesBox && parent !== this._activeContainer) { this._previousTreeSelectedActor = this._activeActor; this._previousSelectedActor = null; } if (this._previousTreeSelectedActor && this._activeContainer !== this.categoriesBox && parent !== this._activeContainer && button !== this._previousTreeSelectedActor && !this.searchActive) { this._previousTreeSelectedActor.style_class = "menu-category-button"; } if (parent != this._activeContainer) { parent._vis_iter.reloadVisible(); } let _maybePreviousActor = this._activeActor; if (_maybePreviousActor && this._activeContainer !== this.categoriesBox) { this._previousSelectedActor = _maybePreviousActor; this._clearPrevSelection(); } if (parent === this.categoriesBox && !this.searchActive) { this._previousSelectedActor = _maybePreviousActor; this._clearPrevCatSelection(); } this._activeContainer = parent; this._activeActor = button.actor; this._selectedItemIndex = this._activeContainer._vis_iter.getAbsoluteIndexOfChild(this._activeActor); callback(); }); button.connect('enter-event', _callback); button.actor.connect('enter-event', _callback); }, _clearPrevSelection: function(actor) { if (this._previousSelectedActor && this._previousSelectedActor != actor) { if (this._previousSelectedActor._delegate instanceof ApplicationButton || this._previousSelectedActor._delegate instanceof RecentButton || this._previousSelectedActor._delegate instanceof SearchProviderResultButton || this._previousSelectedActor._delegate instanceof PlaceButton || this._previousSelectedActor._delegate instanceof RecentClearButton || this._previousSelectedActor._delegate instanceof TransientButton) this._previousSelectedActor.style_class = "menu-application-button"; else if (this._previousSelectedActor._delegate instanceof FavoritesButton || this._previousSelectedActor._delegate instanceof SystemButton) this._previousSelectedActor.remove_style_pseudo_class("hover"); } }, _clearPrevCatSelection: function(actor) { if (this._previousTreeSelectedActor && this._previousTreeSelectedActor != actor) { this._previousTreeSelectedActor.style_class = "menu-category-button"; if (this._previousTreeSelectedActor._delegate) { this._previousTreeSelectedActor._delegate.emit('leave-event'); } if (actor !== undefined) { this._previousVisibleIndex = null; this._previousTreeSelectedActor = actor; } } else { this.categoriesBox.get_children().forEach(Lang.bind(this, function (child) { child.style_class = "menu-category-button"; })); } }, /* * The vectorBox overlays the the categoriesBox to aid in navigation from categories to apps * by preventing misselections. It is set to the same size as the categoriesOverlayBox and * categoriesBox. * * The actor is a quadrilateral that we turn into a triangle by setting the A and B vertices to * the same position. The size and origin of the vectorBox are calculated in _getVectorInfo(). * Using those properties, the bounding box is sized as (w, h) and the triangle is defined as * follows: * _____ * | /|D * | / | AB: (mx, my) * | A/ | C: (w, h) * | B\ | D: (w, 0) * | \ | * |____\|C */ _getVectorInfo: function() { let [mx, my, mask] = global.get_pointer(); let [bx, by] = this.categoriesOverlayBox.get_transformed_position(); let [bw, bh] = this.categoriesOverlayBox.get_transformed_size(); let xformed_mx = mx - bx; let xformed_my = my - by; if (xformed_mx < 0 || xformed_mx > bw || xformed_my < 0 || xformed_my > bh) { return null; } return { mx: xformed_mx, my: xformed_my, w: bw, h: bh }; }, makeVectorBox: function(actor) { this.destroyVectorBox(actor); let vi = this._getVectorInfo(); if (!vi) { return; } this.vectorBox = new St.Polygon({ debug: false, width: vi.w, height: vi.h, ulc_x: vi.mx, ulc_y: vi.my, llc_x: vi.mx, llc_y: vi.my, urc_x: vi.w, urc_y: 0, lrc_x: vi.w, lrc_y: vi.h }); this.categoriesOverlayBox.add_actor(this.vectorBox); this.vectorBox.show(); this.vectorBox.set_reactive(true); this.vectorBox.connect("leave-event", Lang.bind(this, this.destroyVectorBox)); this.vectorBox.connect("motion-event", Lang.bind(this, this.maybeUpdateVectorBox)); this.actor_motion_id = actor.connect("motion-event", Lang.bind(this, this.maybeUpdateVectorBox)); this.current_motion_actor = actor; }, maybeUpdateVectorBox: function() { if (this.vector_update_loop) { Mainloop.source_remove(this.vector_update_loop); this.vector_update_loop = 0; } this.vector_update_loop = Mainloop.timeout_add(50, Lang.bind(this, this.updateVectorBox)); }, updateVectorBox: function(actor) { if (this.vectorBox) { let vi = this._getVectorInfo(); if (vi) { this.vectorBox.ulc_x = vi.mx; this.vectorBox.llc_x = vi.mx; this.vectorBox.queue_repaint(); } else { this.destroyVectorBox(actor); } } this.vector_update_loop = 0; return false; }, destroyVectorBox: function(actor) { if (this.vectorBox != null) { this.vectorBox.destroy(); this.vectorBox = null; } if (this.actor_motion_id > 0 && this.current_motion_actor != null) { this.current_motion_actor.disconnect(this.actor_motion_id); this.actor_motion_id = 0; this.current_motion_actor = null; } }, _refreshPlaces : function() { for (let i = 0; i < this._placesButtons.length; i ++) { this._placesButtons[i].actor.destroy(); } this._placesButtons = []; for (let i = 0; i < this._categoryButtons.length; i++) { if (this._categoryButtons[i] instanceof PlaceCategoryButton) { this._categoryButtons[i].destroy(); this._categoryButtons.splice(i, 1); this.placesButton = null; break; } } // Now generate Places category and places buttons and add to the list if (this.showPlaces) { this.placesButton = new PlaceCategoryButton(null, this.showCategoryIcons); this._addEnterEvent(this.placesButton, Lang.bind(this, function() { if (!this.searchActive) { this.placesButton.isHovered = true; this._clearPrevCatSelection(this.placesButton); this.placesButton.actor.style_class = "menu-category-button-selected"; this.closeContextMenus(null, false); this._select_category("places"); this.makeVectorBox(this.placesButton.actor); } })); this.placesButton.actor.connect('leave-event', Lang.bind(this, function () { if (this._previousTreeSelectedActor === null) { this._previousTreeSelectedActor = this.placesButton.actor; } else { let prevIdx = this.catBoxIter.getVisibleIndex(this._previousTreeSelectedActor); let nextIdx = this.catBoxIter.getVisibleIndex(this.placesButton.actor); let idxDiff = Math.abs(prevIdx - nextIdx); if (idxDiff <= 1 || Math.min(prevIdx, nextIdx) < 0) { this._previousTreeSelectedActor = this.placesButton.actor; } } this.placesButton.isHovered = false; })); this._categoryButtons.push(this.placesButton); this.categoriesBox.add_actor(this.placesButton.actor); let bookmarks = this._listBookmarks(); let devices = this._listDevices(); let places = bookmarks.concat(devices); let handleEnterEvent = (button) => { this._addEnterEvent(button, () => { this._clearPrevSelection(button.actor); button.actor.style_class = "menu-application-button-selected"; this.selectedAppTitle.set_text(""); let selectedAppId = button.place.idDecoded; selectedAppId = selectedAppId.substr(selectedAppId.indexOf(':') + 1); let fileIndex = selectedAppId.indexOf('file:///'); if (fileIndex !== -1) selectedAppId = selectedAppId.substr(fileIndex + 7); this.selectedAppDescription.set_text(selectedAppId); }); }; let handleLeaveEvent = (button) => { button.actor.connect('leave-event', () => { this._previousSelectedActor = button.actor; this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); }); }; for (let i = 0; i < places.length; i++) { let place = places[i]; let button = new PlaceButton(this, place, place.name, this.showApplicationIcons); handleEnterEvent(button); handleLeaveEvent(button); this._placesButtons.push(button); this.applicationsBox.add_actor(button.actor); } } this._setCategoriesButtonActive(!this.searchActive); this._resizeApplicationsBox(); }, _refreshRecent : function() { if (this.privacy_settings.get_boolean(REMEMBER_RECENT_KEY)) { if (this.recentButton == null) { this.recentButton = new RecentCategoryButton(null, this.showCategoryIcons); this._addEnterEvent(this.recentButton, Lang.bind(this, function() { if (!this.searchActive) { this.recentButton.isHovered = true; this._clearPrevCatSelection(this.recentButton.actor); this.recentButton.actor.style_class = "menu-category-button-selected"; this.closeContextMenus(null, false); this._select_category("recent"); this.makeVectorBox(this.recentButton.actor); } })); this.recentButton.actor.connect('leave-event', Lang.bind(this, function () { if (this._previousTreeSelectedActor === null) { this._previousTreeSelectedActor = this.recentButton.actor; } else { let prevIdx = this.catBoxIter.getVisibleIndex(this._previousTreeSelectedActor); let nextIdx = this.catBoxIter.getVisibleIndex(this.recentButton.actor); if (Math.abs(prevIdx - nextIdx) <= 1) { this._previousTreeSelectedActor = this.recentButton.actor; } } this.recentButton.isHovered = false; })); this._categoryButtons.push(this.recentButton); } /* Make sure the recent category is at the bottom (can happen when refreshing places * or apps, since we don't destroy the recent category button each time we refresh recents, * as it happens a lot) */ let parent = this.recentButton.actor.get_parent(); if (parent != null) { parent.remove_child(this.recentButton.actor); } this.categoriesBox.add_actor(this.recentButton.actor); this._categoryButtons.splice(this._categoryButtons.indexOf(this.recentButton), 1); this._categoryButtons.push(this.recentButton); let new_recents = []; if (this.RecentManager._infosByTimestamp.length > 0) { let handleEnterEvent = (button) => { this._addEnterEvent(button, () => { this._clearPrevSelection(button.actor); button.actor.style_class = "menu-application-button-selected"; this.selectedAppTitle.set_text(""); let selectedAppUri = button.uriDecoded; let fileIndex = selectedAppUri.indexOf("file:///"); if (fileIndex !== -1) selectedAppUri = selectedAppUri.substr(fileIndex + 7); this.selectedAppDescription.set_text(selectedAppUri); }); }; let handleLeaveEvent = (button) => { button.actor.connect('leave-event', () => { button.actor.style_class = "menu-application-button"; this._previousSelectedActor = button.actor; this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); }); }; let handleNewButton = (id) => { let uri = this.RecentManager._infosByTimestamp[id].uri; return this._recentButtons.find(button => ((button instanceof RecentButton) && (button.uri) && (button.uri == uri))); }; let id = 0; while (id < this.RecentManager._infosByTimestamp.length) { let new_button = null; new_button = handleNewButton(id); if (new_button == undefined) { let button = new RecentButton(this, this.RecentManager._infosByTimestamp[id], this.showApplicationIcons); handleEnterEvent(button); handleLeaveEvent(button); new_button = button; } new_recents.push(new_button); id++; } let recent_clear_button = null; recent_clear_button = this._recentButtons.find(button => (button instanceof RecentClearButton)); if (recent_clear_button == undefined) { let button = new RecentClearButton(this); this._addEnterEvent(button, Lang.bind(this, function() { this._clearPrevSelection(button.actor); button.actor.style_class = "menu-application-button-selected"; })); button.actor.connect('leave-event', Lang.bind(this, function() { button.actor.style_class = "menu-application-button"; this._previousSelectedActor = button.actor; })); recent_clear_button = button; } new_recents.push(recent_clear_button); this.noRecentDocuments = false; } else { let new_button = null; for (let existing_button in this._recentButtons) { let button = this._recentButtons[existing_button]; if (button instanceof NoRecentDocsButton) { new_button = button; break; } } if (new_button == null) { new_button = new NoRecentDocsButton(_("No recent documents"), null, false, null); } this.noRecentDocuments = true; new_recents.push(new_button); } let to_remove = []; /* Remove no-longer-valid items */ for (let i = 0; i < this._recentButtons.length; i++) { let button = this._recentButtons[i]; if (button instanceof NoRecentDocsButton && !this.noRecentDocuments) { to_remove.push(button); } else if (button instanceof RecentButton) { if (new_recents.indexOf(button) == -1) { to_remove.push(button); } } } if (to_remove.length > 0) { for (let i in to_remove) { to_remove[i].destroy(); this._recentButtons.splice(this._recentButtons.indexOf(to_remove[i]), 1); } } to_remove = []; /* Now, add new actors, shuffle existing actors */ let placeholder = null; /* Find the first occurrence of a RecentButton, if it exists */ let children = this.applicationsBox.get_children(); for (let i = children.length - 1; i > 0; i--) { if ((children[i]._delegate instanceof RecentButton) || (children[i]._delegate instanceof RecentClearButton) || (i == children.length - 1)) { placeholder = children[i - 1]; break; } } children = null; for (let i = 0; i < new_recents.length; i++) { let actor = new_recents[i].actor; let parent = actor.get_parent(); if (parent != null) { parent.remove_child(actor); } if (placeholder != actor) { this.applicationsBox.insert_child_above(actor, placeholder); } else { this.applicationsBox.add_child(actor); } placeholder = actor; } this._recentButtons = new_recents; } else { for (let i = 0; i < this._recentButtons.length; i ++) { this._recentButtons[i].destroy(); } this._recentButtons = []; for (let i = 0; i < this._categoryButtons.length; i++) { if (this._categoryButtons[i] instanceof RecentCategoryButton) { this._categoryButtons[i].destroy(); this._categoryButtons.splice(i, 1); this.recentButton = null; break; } } } this._setCategoriesButtonActive(!this.searchActive); this._resizeApplicationsBox(); }, _refreshApps : function() { /* iterate in reverse, so multiple splices will not upset * the remaining elements */ for (let i = this._categoryButtons.length - 1; i > -1; i--) { if (this._categoryButtons[i] instanceof CategoryButton) { this._categoryButtons[i].destroy(); this._categoryButtons.splice(i, 1); } } this._applicationsButtons.forEach(Lang.bind(this, function(button) { button.destroy(); })); this._applicationsButtons = []; // this.applicationsBox.destroy_all_children(); this._transientButtons = []; this._applicationsButtonFromApp = {}; this._applicationsBoxWidth = 0; this._allAppsCategoryButton = new CategoryButton(null); this._addEnterEvent(this._allAppsCategoryButton, Lang.bind(this, function() { if (!this.searchActive) { this._allAppsCategoryButton.isHovered = true; this._clearPrevCatSelection(this._allAppsCategoryButton.actor); this._allAppsCategoryButton.actor.style_class = "menu-category-button-selected"; this._select_category(null); this.makeVectorBox(this._allAppsCategoryButton.actor); } })); this._allAppsCategoryButton.actor.connect('leave-event', Lang.bind(this, function () { this._previousSelectedActor = this._allAppsCategoryButton.actor; this._allAppsCategoryButton.isHovered = false; })); this.categoriesBox.add_actor(this._allAppsCategoryButton.actor); this._categoryButtons.push(this._allAppsCategoryButton); let trees = [appsys.get_tree()]; for (var i in trees) { let tree = trees[i]; let root = tree.get_root_directory(); let dirs = []; let iter = root.iter(); let nextType; while ((nextType = iter.next()) != CMenu.TreeItemType.INVALID) { if (nextType == CMenu.TreeItemType.DIRECTORY) { dirs.push(iter.get_directory()); } } let prefCats = ["administration", "preferences"]; let sortDirs = function(a, b) { let menuIdA = a.get_menu_id().toLowerCase(); let menuIdB = b.get_menu_id().toLowerCase(); let prefIdA = prefCats.indexOf(menuIdA); let prefIdB = prefCats.indexOf(menuIdB); if (prefIdA < 0 && prefIdB >= 0) { return -1; } if (prefIdA >= 0 && prefIdB < 0) { return 1; } let nameA = a.get_name().toLowerCase(); let nameB = b.get_name().toLowerCase(); if (nameA > nameB) { return 1; } if (nameA < nameB) { return -1; } return 0; }; dirs = dirs.sort(sortDirs); let handleEnterEvent = (categoryButton, dir) => { this._addEnterEvent(categoryButton, () => { if (!this.searchActive) { categoryButton.isHovered = true; this._clearPrevCatSelection(categoryButton.actor); categoryButton.actor.style_class = "menu-category-button-selected"; this._select_category(dir.get_menu_id()); this.makeVectorBox(categoryButton.actor); } }); }; let handleLeaveEvent = (categoryButton, dir) => { categoryButton.actor.connect('leave-event', () => { if (this._previousTreeSelectedActor === null) { this._previousTreeSelectedActor = categoryButton.actor; } else { let prevIdx = this.catBoxIter.getVisibleIndex(this._previousTreeSelectedActor); let nextIdx = this.catBoxIter.getVisibleIndex(categoryButton.actor); if (Math.abs(prevIdx - nextIdx) <= 1) { this._previousTreeSelectedActor = categoryButton.actor; } } categoryButton.isHovered = false; }); }; for (let i = 0; i < dirs.length; i++) { let dir = dirs[i]; if (dir.get_is_nodisplay()) continue; if (this._loadCategory(dir)) { let categoryButton = new CategoryButton(dir, this.showCategoryIcons); handleEnterEvent(categoryButton, dir); handleLeaveEvent(categoryButton, dir); this._categoryButtons.push(categoryButton); this.categoriesBox.add_actor(categoryButton.actor); } } } // Sort apps and add to applicationsBox this._applicationsButtons.sort(function(a, b) { a = Util.latinise(a.app.get_name().toLowerCase()); b = Util.latinise(b.app.get_name().toLowerCase()); return a > b; }); for (let i = 0; i < this._applicationsButtons.length; i++) { this.applicationsBox.add_actor(this._applicationsButtons[i].actor); this.applicationsBox.add_actor(this._applicationsButtons[i].menu.actor); } this._appsWereRefreshed = true; }, _favEnterEvent : function(button) { button.actor.add_style_pseudo_class("hover"); if (button instanceof FavoritesButton) { this.selectedAppTitle.set_text(button.app.get_name()); if (button.app.get_description()) this.selectedAppDescription.set_text(button.app.get_description().split("\n")[0]); else this.selectedAppDescription.set_text(""); } else { this.selectedAppTitle.set_text(button.name); this.selectedAppDescription.set_text(button.desc); } }, _favLeaveEvent : function(widget, event, button) { this._previousSelectedActor = button.actor; button.actor.remove_style_pseudo_class("hover"); this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); }, _refreshFavs : function() { //Remove all favorites this.favoritesBox.destroy_all_children(); //Load favorites again this._favoritesButtons = []; let launchers = global.settings.get_strv('favorite-apps'); let appSys = Cinnamon.AppSystem.get_default(); for ( let i = 0; i < launchers.length; ++i ) { let app = appSys.lookup_app(launchers[i]); if (app) { let button = new FavoritesButton(this, app, launchers.length + 3); // + 3 because we're adding 3 system buttons at the bottom this._favoritesButtons[app] = button; this.favoritesBox.add(button.actor, { y_align: St.Align.END, y_fill: false }); this._addEnterEvent(button, Lang.bind(this, this._favEnterEvent, button)); button.actor.connect('leave-event', Lang.bind(this, this._favLeaveEvent, button)); } } //Separator if (launchers.length != 0) { let separator = new PopupMenu.PopupSeparatorMenuItem(); this.favoritesBox.add(separator.actor, { y_align: St.Align.END, y_fill: false }); } //Lock screen let button = new SystemButton(this, "system-lock-screen", launchers.length + 3, _("Lock screen"), _("Lock the screen")); this._addEnterEvent(button, Lang.bind(this, this._favEnterEvent, button)); button.actor.connect('leave-event', Lang.bind(this, this._favLeaveEvent, button)); button.activate = Lang.bind(this, function() { this.menu.close(); let screensaver_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.screensaver" }); let screensaver_dialog = Gio.file_new_for_path("/usr/bin/cinnamon-screensaver-command"); if (screensaver_dialog.query_exists(null)) { if (screensaver_settings.get_boolean("ask-for-away-message")) { Util.spawnCommandLine("cinnamon-screensaver-lock-dialog"); } else { Util.spawnCommandLine("cinnamon-screensaver-command --lock"); } } else { this._screenSaverProxy.LockRemote(""); } }); this.favoritesBox.add(button.actor, { y_align: St.Align.END, y_fill: false }); //Logout button button = new SystemButton(this, "system-log-out", launchers.length + 3, _("Logout"), _("Leave the session")); this._addEnterEvent(button, Lang.bind(this, this._favEnterEvent, button)); button.actor.connect('leave-event', Lang.bind(this, this._favLeaveEvent, button)); button.activate = Lang.bind(this, function() { this.menu.close(); this._session.LogoutRemote(0); }); this.favoritesBox.add(button.actor, { y_align: St.Align.END, y_fill: false }); //Shutdown button button = new SystemButton(this, "system-shutdown", launchers.length + 3, _("Quit"), _("Shutdown the computer")); this._addEnterEvent(button, Lang.bind(this, this._favEnterEvent, button)); button.actor.connect('leave-event', Lang.bind(this, this._favLeaveEvent, button)); button.activate = Lang.bind(this, function() { this.menu.close(); this._session.ShutdownRemote(); }); this.favoritesBox.add(button.actor, { y_align: St.Align.END, y_fill: false }); }, _loadCategory: function(dir, top_dir) { var iter = dir.iter(); var has_entries = false; var nextType; if (!top_dir) top_dir = dir; while ((nextType = iter.next()) != CMenu.TreeItemType.INVALID) { if (nextType == CMenu.TreeItemType.ENTRY) { var entry = iter.get_entry(); if (!entry.get_app_info().get_nodisplay()) { has_entries = true; var app = appsys.lookup_app_by_tree_entry(entry); if (!app) app = appsys.lookup_settings_app_by_tree_entry(entry); var app_key = app.get_id(); if (app_key == null) { app_key = app.get_name() + ":" + app.get_description(); } if (!(app_key in this._applicationsButtonFromApp)) { let applicationButton = new ApplicationButton(this, app, this.showApplicationIcons); var app_is_known = false; for (var i = 0; i < this._knownApps.length; i++) { if (this._knownApps[i] == app_key) { app_is_known = true; } } if (!app_is_known) { if (this._appsWereRefreshed) { applicationButton.highlight(); } else { this._knownApps.push(app_key); } } applicationButton.actor.connect('leave-event', Lang.bind(this, this._appLeaveEvent, applicationButton)); this._addEnterEvent(applicationButton, Lang.bind(this, this._appEnterEvent, applicationButton)); this._applicationsButtons.push(applicationButton); applicationButton.category.push(top_dir.get_menu_id()); this._applicationsButtonFromApp[app_key] = applicationButton; } else { this._applicationsButtonFromApp[app_key].category.push(dir.get_menu_id()); } } } else if (nextType == CMenu.TreeItemType.DIRECTORY) { let subdir = iter.get_directory(); if (this._loadCategory(subdir, top_dir)) { has_entries = true; } } } return has_entries; }, _appLeaveEvent: function(a, b, applicationButton) { this._previousSelectedActor = applicationButton.actor; applicationButton.actor.style_class = "menu-application-button"; this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); }, _appEnterEvent: function(applicationButton) { this.selectedAppTitle.set_text(applicationButton.app.get_name()); if (applicationButton.app.get_description()) this.selectedAppDescription.set_text(applicationButton.app.get_description()); else this.selectedAppDescription.set_text(""); this._previousVisibleIndex = this.appBoxIter.getVisibleIndex(applicationButton.actor); this._clearPrevSelection(applicationButton.actor); applicationButton.actor.style_class = "menu-application-button-selected"; }, _scrollToButton: function(button) { var current_scroll_value = this.applicationsScrollBox.get_vscroll_bar().get_adjustment().get_value(); var box_height = this.applicationsScrollBox.get_allocation_box().y2-this.applicationsScrollBox.get_allocation_box().y1; var new_scroll_value = current_scroll_value; if (current_scroll_value > button.actor.get_allocation_box().y1-10) new_scroll_value = button.actor.get_allocation_box().y1-10; if (box_height+current_scroll_value < button.actor.get_allocation_box().y2+10) new_scroll_value = button.actor.get_allocation_box().y2-box_height+10; if (new_scroll_value!=current_scroll_value) this.applicationsScrollBox.get_vscroll_bar().get_adjustment().set_value(new_scroll_value); }, _display : function() { this._activeContainer = null; this._activeActor = null; this.vectorBox = null; this.actor_motion_id = 0; this.vector_update_loop = null; this.current_motion_actor = null; let section = new PopupMenu.PopupMenuSection(); this.menu.addMenuItem(section); this.leftPane = new St.BoxLayout({ vertical: true }); this.leftBox = new St.BoxLayout({ style_class: 'menu-favorites-box', vertical: true }); this._session = new GnomeSession.SessionManager(); this._screenSaverProxy = new ScreenSaver.ScreenSaverProxy(); this.leftPane.add(this.leftBox, { y_align: St.Align.END, y_fill: false }); this._favboxtoggle(); let rightPane = new St.BoxLayout({ vertical: true }); this.searchBox = new St.BoxLayout({ style_class: 'menu-search-box' }); rightPane.add_actor(this.searchBox); this.searchEntry = new St.Entry({ name: 'menu-search-entry', hint_text: _("Type to search..."), track_hover: true, can_focus: true }); this.searchEntry.set_secondary_icon(this._searchInactiveIcon); this.searchBox.add_actor(this.searchEntry); this.searchActive = false; this.searchEntryText = this.searchEntry.clutter_text; this.searchEntryText.connect('text-changed', Lang.bind(this, this._onSearchTextChanged)); this.searchEntryText.connect('key-press-event', Lang.bind(this, this._onMenuKeyPress)); this._previousSearchPattern = ""; this.categoriesApplicationsBox = new CategoriesApplicationsBox(); rightPane.add_actor(this.categoriesApplicationsBox.actor); this.categoriesOverlayBox = new Clutter.Actor(); this.categoriesBox = new St.BoxLayout({ style_class: 'menu-categories-box', vertical: true, accessible_role: Atk.Role.LIST }); this.categoriesOverlayBox.add_actor(this.categoriesBox); this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, y_align: St.Align.START, style_class: 'vfade menu-applications-scrollbox' }); this.a11y_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.a11y.applications" }); this.a11y_settings.connect("changed::screen-magnifier-enabled", Lang.bind(this, this._updateVFade)); this.a11y_mag_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.a11y.magnifier" }); this.a11y_mag_settings.connect("changed::mag-factor", Lang.bind(this, this._updateVFade)); this._updateVFade(); this.settings.bind("enable-autoscroll", "autoscroll_enabled", this._update_autoscroll); this._update_autoscroll(); let vscroll = this.applicationsScrollBox.get_vscroll_bar(); vscroll.connect('scroll-start', Lang.bind(this, function() { this.menu.passEvents = true; })); vscroll.connect('scroll-stop', Lang.bind(this, function() { this.menu.passEvents = false; })); this.applicationsBox = new St.BoxLayout({ style_class: 'menu-applications-inner-box', vertical:true }); this.applicationsBox.add_style_class_name('menu-applications-box'); //this is to support old themes this.applicationsScrollBox.add_actor(this.applicationsBox); this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.categoriesApplicationsBox.actor.add_actor(this.categoriesOverlayBox); this.categoriesApplicationsBox.actor.add_actor(this.applicationsScrollBox); let fav_obj = new FavoritesBox(); this.favoritesBox = fav_obj.actor; this.leftBox.add(this.favoritesBox, { y_align: St.Align.END, y_fill: false }); this.mainBox = new St.BoxLayout({ style_class: 'menu-applications-outer-box', vertical:false }); this.mainBox.add_style_class_name('menu-applications-box'); //this is to support old themes this.mainBox.add(this.leftPane, { span: 1 }); this.mainBox.add(rightPane, { span: 1 }); this.mainBox._delegate = null; section.actor.add(this.mainBox); this.selectedAppBox = new St.BoxLayout({ style_class: 'menu-selected-app-box', vertical: true }); if (this.selectedAppBox.peek_theme_node() == null || this.selectedAppBox.get_theme_node().get_length('height') == 0) this.selectedAppBox.set_height(30 * global.ui_scale); this.selectedAppTitle = new St.Label({ style_class: 'menu-selected-app-title', text: "" }); this.selectedAppBox.add_actor(this.selectedAppTitle); this.selectedAppDescription = new St.Label({ style_class: 'menu-selected-app-description', text: "" }); this.selectedAppBox.add_actor(this.selectedAppDescription); this.selectedAppBox._delegate = null; section.actor.add_actor(this.selectedAppBox); this.appBoxIter = new VisibleChildIterator(this.applicationsBox); this.applicationsBox._vis_iter = this.appBoxIter; this.catBoxIter = new VisibleChildIterator(this.categoriesBox); this.categoriesBox._vis_iter = this.catBoxIter; this.favBoxIter = new VisibleChildIterator(this.favoritesBox); this.favoritesBox._vis_iter = this.favBoxIter; Mainloop.idle_add(Lang.bind(this, function() { this._clearAllSelections(true); })); this.menu.actor.connect("allocation-changed", Lang.bind(this, this._on_allocation_changed)); }, _updateVFade: function() { let mag_on = this.a11y_settings.get_boolean("screen-magnifier-enabled") && this.a11y_mag_settings.get_double("mag-factor") > 1.0; if (mag_on) { this.applicationsScrollBox.style_class = "menu-applications-scrollbox"; } else { this.applicationsScrollBox.style_class = "vfade menu-applications-scrollbox"; } }, _update_autoscroll: function() { this.applicationsScrollBox.set_auto_scrolling(this.autoscroll_enabled); }, _on_allocation_changed: function(box, flags, data) { this._recalc_height(); }, _clearAllSelections: function(hide_apps) { let actors = this.applicationsBox.get_children(); for (let i = 0; i < actors.length; i++) { let actor = actors[i]; actor.style_class = "menu-application-button"; if (hide_apps) { actor.hide(); } } actors = this.categoriesBox.get_children(); for (let i = 0; i < actors.length; i++){ let actor = actors[i]; actor.style_class = "menu-category-button"; actor.show(); } actors = this.favoritesBox.get_children(); for (let i = 0; i < actors.length; i++){ let actor = actors[i]; actor.remove_style_pseudo_class("hover"); actor.show(); } }, _select_category : function(name) { if (name === this.lastSelectedCategory) { return; } this.lastSelectedCategory = name; if (name === "places") { this._displayButtons(null, -1); } else if (name === "recent") { this._displayButtons(null, null, -1); } else if (name == null) { this._displayButtons(this._listApplications(null)); } else { this._displayButtons(this._listApplications(name)); } this.closeContextMenus(null, false); }, closeContextMenus: function(excluded, animate) { for (let app in this._applicationsButtons){ if (this._applicationsButtons[app] != excluded && this._applicationsButtons[app].menu.isOpen){ if (animate) this._applicationsButtons[app].toggleMenu(); else this._applicationsButtons[app].closeMenu(); } } if (!this.recentContextMenu) { return; } let item = this.recentContextMenu.sourceActor._delegate; if ((item != excluded || excluded == null) && item.menu && item.menu.isOpen) { if (animate) this.recentContextMenu.toggle(); else this.recentContextMenu.close(); this._activeContextMenuParent = null; this._activeContextMenuItem = null; } }, _resize_actor_iter: function(actor) { let [min, nat] = actor.get_preferred_width(-1.0); if (nat > this._applicationsBoxWidth){ this._applicationsBoxWidth = nat; this.applicationsBox.set_width(this._applicationsBoxWidth + 42); // The answer to life... } }, _resizeApplicationsBox: function() { this._applicationsBoxWidth = 0; this.applicationsBox.set_width(-1); let child = this.applicationsBox.get_first_child(); this._resize_actor_iter(child); while ((child = child.get_next_sibling()) != null) { this._resize_actor_iter(child); } }, _displayButtons: function(appCategory, places, recent, apps, autocompletes){ if (appCategory) { if (appCategory == "all") { this._applicationsButtons.forEach( function (item, index) { item.actor.show(); }); } else { this._applicationsButtons.forEach( function (item, index) { if (item.category.indexOf(appCategory) != -1) { item.actor.show(); } else { item.actor.hide(); } }); } } else if (apps) { for (let i = 0; i < this._applicationsButtons.length; i++) { if (apps.indexOf(this._applicationsButtons[i].app.get_id()) != -1) { this._applicationsButtons[i].actor.show(); } else { this._applicationsButtons[i].actor.hide(); } } } else { this._applicationsButtons.forEach( function (item, index) { item.actor.hide(); }); } if (places) { if (places == -1) { this._placesButtons.forEach( function (item, index) { item.actor.show(); }); } else { for (let i = 0; i < this._placesButtons.length; i++) { if (places.indexOf(this._placesButtons[i].button_name) != -1) { this._placesButtons[i].actor.show(); } else { this._placesButtons[i].actor.hide(); } } } } else { this._placesButtons.forEach( function (item, index) { item.actor.hide(); }); } if (recent) { if (recent == -1) { this._recentButtons.forEach( function (item, index) { item.actor.show(); }); } else { for (let i = 0; i < this._recentButtons.length; i++) { if (recent.indexOf(this._recentButtons[i].button_name) != -1) { this._recentButtons[i].actor.show(); } else { this._recentButtons[i].actor.hide(); } } } } else { this._recentButtons.forEach( function (item, index) { item.actor.hide(); }); } if (autocompletes) { this._transientButtons.forEach( function (item, index) { item.actor.destroy(); }); this._transientButtons = []; for (let i = 0; i < autocompletes.length; i++) { let button = new TransientButton(this, autocompletes[i]); button.actor.connect('leave-event', Lang.bind(this, this._appLeaveEvent, button)); this._addEnterEvent(button, Lang.bind(this, this._appEnterEvent, button)); this._transientButtons.push(button); this.applicationsBox.add_actor(button.actor); button.actor.realize(); } } this._searchProviderButtons.forEach( function (item, index) { if (item.actor.visible) { item.actor.hide(); } }); }, _setCategoriesButtonActive: function(active) { try { let categoriesButtons = this.categoriesBox.get_children(); for (var i in categoriesButtons) { let button = categoriesButtons[i]; if (active){ button.set_style_class_name("menu-category-button"); } else { button.set_style_class_name("menu-category-button-greyed"); } } } catch (e) { global.log(e); } }, resetSearch: function(){ this.searchEntry.set_text(""); this._previousSearchPattern = ""; this.searchActive = false; this._clearAllSelections(true); this._setCategoriesButtonActive(true); global.stage.set_key_focus(this.searchEntry); }, _onSearchTextChanged: function (se, prop) { if (this.menuIsOpening) { this.menuIsOpening = false; return; } else { let searchString = this.searchEntry.get_text(); if (searchString == '' && !this.searchActive) return; this.searchActive = searchString != ''; this._fileFolderAccessActive = this.searchActive && this.searchFilesystem; this._clearAllSelections(); if (this.searchActive) { this.searchEntry.set_secondary_icon(this._searchActiveIcon); if (this._searchIconClickedId == 0) { this._searchIconClickedId = this.searchEntry.connect('secondary-icon-clicked', Lang.bind(this, function() { this.resetSearch(); this._select_category(null); })); } this._setCategoriesButtonActive(false); this._doSearch(); } else { if (this._searchIconClickedId > 0) this.searchEntry.disconnect(this._searchIconClickedId); this._searchIconClickedId = 0; this.searchEntry.set_secondary_icon(this._searchInactiveIcon); this._previousSearchPattern = ""; this._setCategoriesButtonActive(true); this._select_category(null); this._allAppsCategoryButton.actor.style_class = "menu-category-button-selected"; this._activeContainer = null; this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); } return; } }, _listBookmarks: function(pattern){ let bookmarks = Main.placesManager.getBookmarks(); var res = []; for (let id = 0; id < bookmarks.length; id++) { if (!pattern || bookmarks[id].name.toLowerCase().indexOf(pattern)!=-1) res.push(bookmarks[id]); } return res; }, _listDevices: function(pattern){ let devices = Main.placesManager.getMounts(); var res = []; for (let id = 0; id < devices.length; id++) { if (!pattern || devices[id].name.toLowerCase().indexOf(pattern)!=-1) res.push(devices[id]); } return res; }, _listApplications: function(category_menu_id, pattern){ var applist = []; if (category_menu_id) { applist = category_menu_id; } else { applist = "all"; } let res; if (pattern){ res = []; var regexpPattern = new RegExp("\\b"+pattern); var foundByName = false; for (var i in this._applicationsButtons) { let app = this._applicationsButtons[i].app; if (Util.latinise(app.get_name().toLowerCase()).match(regexpPattern) != null) { res.push(app.get_id()); foundByName = true; } } if (!foundByName) { for (var i in this._applicationsButtons) { let app = this._applicationsButtons[i].app; if (Util.latinise(app.get_name().toLowerCase()).indexOf(pattern)!=-1 || (app.get_keywords() && Util.latinise(app.get_keywords().toLowerCase()).indexOf(pattern)!=-1) || (app.get_description() && Util.latinise(app.get_description().toLowerCase()).indexOf(pattern)!=-1) || (app.get_id() && Util.latinise(app.get_id().slice(0, -8).toLowerCase()).indexOf(pattern)!=-1)) res.push(app.get_id()); } } } else res = applist; return res; }, _doSearch: function(){ this._searchTimeoutId = 0; let pattern = this.searchEntryText.get_text().replace(/^\s+/g, '').replace(/\s+$/g, '').toLowerCase(); pattern = Util.latinise(pattern); if (pattern==this._previousSearchPattern) return false; this._previousSearchPattern = pattern; this._activeContainer = null; this._activeActor = null; this._selectedItemIndex = null; this._previousTreeSelectedActor = null; this._previousSelectedActor = null; // _listApplications returns all the applications when the search // string is zero length. This will happened if you type a space // in the search entry. if (pattern.length == 0) { return false; } var appResults = this._listApplications(null, pattern); var placesResults = []; var bookmarks = this._listBookmarks(pattern); for (let i in bookmarks) placesResults.push(bookmarks[i].name); var devices = this._listDevices(pattern); for (let i in devices) placesResults.push(devices[i].name); var recentResults = []; for (let i = 0; i < this._recentButtons.length; i++) { if (!(this._recentButtons[i] instanceof RecentClearButton) && this._recentButtons[i].button_name.toLowerCase().indexOf(pattern) != -1) recentResults.push(this._recentButtons[i].button_name); } var acResults = []; // search box autocompletion results if (this.searchFilesystem) { // Don't use the pattern here, as filesystem is case sensitive acResults = this._getCompletions(this.searchEntryText.get_text()); } this._displayButtons(null, placesResults, recentResults, appResults, acResults); this.appBoxIter.reloadVisible(); if (this.appBoxIter.getNumVisibleChildren() > 0) { let item_actor = this.appBoxIter.getFirstVisible(); this._selectedItemIndex = this.appBoxIter.getAbsoluteIndexOfChild(item_actor); this._activeContainer = this.applicationsBox; if (item_actor && item_actor != this.searchEntry) { item_actor._delegate.emit('enter-event'); } } else { this.selectedAppTitle.set_text(""); this.selectedAppDescription.set_text(""); } SearchProviderManager.launch_all(pattern, Lang.bind(this, function(provider, results){ try{ for (var i in results){ if (results[i].type != 'software') { let button = new SearchProviderResultButton(this, provider, results[i]); button.actor.connect('leave-event', Lang.bind(this, this._appLeaveEvent, button)); this._addEnterEvent(button, Lang.bind(this, this._appEnterEvent, button)); this._searchProviderButtons.push(button); this.applicationsBox.add_actor(button.actor); button.actor.realize(); } } }catch(e){global.log(e);} })); return false; }, _getCompletion : function(text) { if (text.indexOf('/') != -1) { if (text.substr(text.length - 1) == '/') { return ''; } else { return this._pathCompleter.get_completion_suffix(text); } } else { return false; } }, _getCompletions : function(text) { if (text.indexOf('/') != -1) { return this._pathCompleter.get_completions(text); } else { return []; } }, _run : function(input) { this._commandError = false; if (input) { let path = null; if (input.charAt(0) == '/') { path = input; } else { if (input.charAt(0) == '~') input = input.slice(1); path = GLib.get_home_dir() + '/' + input; } if (GLib.file_test(path, GLib.FileTest.EXISTS)) { let file = Gio.file_new_for_path(path); try { Gio.app_info_launch_default_for_uri(file.get_uri(), global.create_app_launch_context()); } catch (e) { // The exception from gjs contains an error string like: // Error invoking Gio.app_info_launch_default_for_uri: No application // is registered as handling this file // We are only interested in the part after the first colon. //let message = e.message.replace(/[^:]*: *(.+)/, '$1'); return false; } } else { return false; } } return true; } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/trash@cinnamon.org/0000775000175000017500000000000013215735076024247 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/trash@cinnamon.org/metadata.json0000664000175000017500000000027013215735076026721 0ustar fabiofabio{ "uuid": "trash@cinnamon.org", "name": "Trash", "description": "Control the trash from the panel", "icon": "user-trash", "localedir": "/usr/share/locale", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/trash@cinnamon.org/applet.js0000664000175000017500000000645413215735076026103 0ustar fabiofabioconst St = imports.gi.St; const ModalDialog = imports.ui.modalDialog; const Gio = imports.gi.Gio; const Lang = imports.lang; const Applet = imports.ui.applet; const PopupMenu = imports.ui.popupMenu; const Mainloop = imports.mainloop; const Util = imports.misc.util; const MESSAGE = _("Are you sure you want to delete all items from the trash?") + "\n" + _("This operation cannot be undone."); function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("user-trash"); this.set_applet_tooltip(_("Trash")); this.trash_path = 'trash:///'; this.trash_directory = Gio.file_new_for_uri(this.trash_path); this._initContextMenu(); this.trash_changed_timeout = 0; this._onTrashChange(); this.monitor = this.trash_directory.monitor_directory(0, null); this.monitor.connect('changed', Lang.bind(this, this._onTrashChange)); } catch (e) { global.logError(e); } }, _initContextMenu: function () { this.empty_item = new PopupMenu.PopupIconMenuItem(_("Empty Trash"), "list-remove", St.IconType.SYMBOLIC); this.empty_item.connect('activate', Lang.bind(this, this._emptyTrash)); this._applet_context_menu.addMenuItem(this.empty_item); this.open_item = new PopupMenu.PopupIconMenuItem(_("Open Trash"), "document-open", St.IconType.SYMBOLIC); this.open_item.connect('activate', Lang.bind(this, this._openTrash)); this._applet_context_menu.addMenuItem(this.open_item); }, on_applet_clicked: function(event) { this._openTrash(); }, _openTrash: function() { Gio.app_info_launch_default_for_uri(this.trash_directory.get_uri(), null); }, _onTrashChange: function() { if (this.trash_changed_timeout > 0) { Mainloop.source_remove(this.trash_changed_timeout); this.trash_changed_timeout = 0; } this.trash_changed_timeout = Mainloop.timeout_add_seconds(1, Lang.bind(this, this._onTrashChangeTimeout)); }, _onTrashChangeTimeout: function() { this.trash_changed_timeout = 0; if (this.trash_directory.query_exists(null)) { let children = this.trash_directory.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null); if (children.next_file(null) == null) { this.set_applet_icon_symbolic_name("user-trash"); } else { this.set_applet_icon_symbolic_name("user-trash-full"); } children.close(null); } }, _emptyTrash: function() { new ModalDialog.ConfirmDialog(MESSAGE, this._doEmptyTrash).open(); }, _doEmptyTrash: function() { Util.spawn(['gvfs-trash', '--empty']); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/show-desktop@cinnamon.org/0000775000175000017500000000000013215735076025555 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/show-desktop@cinnamon.org/settings-schema.json0000664000175000017500000000204113215735076031543 0ustar fabiofabio{ "head" : { "type" : "header", "description" : "Settings" }, "peek-at-desktop" : { "type" : "switch", "default" : false, "description": "Peek at the desktop on hover", "tooltip": "Peek at the desktop when hovering the applet" }, "peek-blur" : { "type" : "switch", "default" : false, "dependency" : "peek-at-desktop", "indent" : true, "description" : "Blur effect", "tooltip" : "Blur windows when peeking at the desktop" }, "peek-delay" : { "type": "spinbutton", "default" : 400, "min" : 0, "max" : 1000, "step" : 50, "units" : "milliseconds", "dependency" : "peek-at-desktop", "indent" : true, "description": "Hover delay", "tooltip": "Delay before Peek shows desktop" }, "peek-opacity": { "type": "scale", "default" : 10, "min" : 0, "max" : 255, "step" : 10, "dependency" : "peek-at-desktop", "indent" : true, "description" : "Window opacity", "tooltip" : "Change the opacity of windows when peeking at the desktop" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/show-desktop@cinnamon.org/metadata.json0000664000175000017500000000023113215735076030224 0ustar fabiofabio{ "uuid": "show-desktop@cinnamon.org", "name": "Show desktop", "description": "Minimize all windows", "icon": "user-desktop", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/show-desktop@cinnamon.org/applet.js0000664000175000017500000001064613215735076027407 0ustar fabiofabioconst Applet = imports.ui.applet; const Settings = imports.ui.settings; // Needed for settings API const Mainloop = imports.mainloop; const Tweener = imports.ui.tweener; const Clutter = imports.gi.Clutter; const Lang = imports.lang; const SignalManager = imports.misc.signalManager; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.settings = new Settings.AppletSettings(this, "show-desktop@cinnamon.org", instance_id); this.settings.bindProperty(Settings.BindingDirection.IN, "peek-at-desktop", "peek_at_desktop", null, null); this.settings.bindProperty(Settings.BindingDirection.IN, "peek-delay", "peek_delay", null, null); this.settings.bindProperty(Settings.BindingDirection.IN, "peek-opacity", "peek_opacity", null, null); this.settings.bindProperty(Settings.BindingDirection.IN, "peek-blur", "peek_blur", null, null); this.signals = new SignalManager.SignalManager(null); this.actor.connect('enter-event', Lang.bind(this, this._on_enter)); this.actor.connect('leave-event', Lang.bind(this, this._on_leave)); this.signals.connect(global.stage, 'notify::key-focus', this._on_leave, this); this._did_peek = false; this._peek_timeout_id = 0; this.set_applet_icon_name("user-desktop"); this.set_applet_tooltip(_("Show desktop")); }, on_applet_removed_from_panel: function() { this.signals.disconnectAllSignals(); }, show_all_windows: function(time) { let windows = global.get_window_actors(); for(let i = 0; i < windows.length; i++){ let window = windows[i].meta_window; let compositor = windows[i]; if(window.get_title() == "Desktop"){ Tweener.addTween(compositor, { opacity: 255, time: time, transition: "easeOutSine" }); } if (this.peek_blur && compositor.eff) { compositor.remove_effect(compositor.eff); } } Tweener.addTween(global.window_group, { opacity: 255, time: time, transition: "easeOutSine" }); }, _on_enter: function(event) { if (this.peek_at_desktop) { if (this._peek_timeout_id > 0) { Mainloop.source_remove(this._peek_timeout_id); this._peek_timeout_id = 0; } this._peek_timeout_id = Mainloop.timeout_add(this.peek_delay, Lang.bind(this, function() { if (this.actor.hover && !this._applet_context_menu.isOpen && !global.settings.get_boolean("panel-edit-mode")) { Tweener.addTween(global.window_group, {opacity: this.peek_opacity, time: 0.275, transition: "easeInSine"}); let windows = global.get_window_actors(); for (let i = 0; i < windows.length; i++) { let compositor = windows[i]; if (this.peek_blur) { if (!compositor.eff) compositor.eff = new Clutter.BlurEffect(); compositor.add_effect_with_name('peek-blur', compositor.eff); } } this._did_peek = true; } this._peek_timeout_id = 0; return false; })); } }, _on_leave: function(event) { if (this._did_peek) { this.show_all_windows(0.2); this._did_peek = false; } if (this._peek_timeout_id > 0) { Mainloop.source_remove(this._peek_timeout_id); this._peek_timeout_id = 0; } }, on_applet_clicked: function(event) { global.screen.toggle_desktop(global.get_current_time()); this.show_all_windows(0); if (this._peek_timeout_id > 0) { Mainloop.source_remove(this._peek_timeout_id); this._peek_timeout_id = 0; } this._did_peek = false; } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/removable-drives@cinnamon.org/0000775000175000017500000000000013215735076026374 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/removable-drives@cinnamon.org/metadata.json0000664000175000017500000000024313215735076031046 0ustar fabiofabio{ "uuid": "removable-drives@cinnamon.org", "name": "Removable drives", "description": "Access removable drives", "icon": "media-eject", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/removable-drives@cinnamon.org/applet.js0000664000175000017500000000702113215735076030217 0ustar fabiofabioconst Lang = imports.lang; const St = imports.gi.St; const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; const Applet = imports.ui.applet; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const PANEL_EDIT_MODE_KEY = "panel-edit-mode"; function DriveMenuItem(place) { this._init(place); } DriveMenuItem.prototype = { __proto__: PopupMenu.PopupBaseMenuItem.prototype, _init: function(place) { PopupMenu.PopupBaseMenuItem.prototype._init.call(this); this.place = place; this.label = new St.Label({ text: place.name }); this.addActor(this.label); let ejectIcon = new St.Icon({ icon_name: 'media-eject', icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon ' }); let ejectButton = new St.Button({ child: ejectIcon }); ejectButton.connect('clicked', Lang.bind(this, this._eject)); this.addActor(ejectButton); }, _eject: function() { this.place.remove(); }, activate: function(event) { this.place.launch({ timestamp: event.get_time() }); PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event); } }; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("drive-harddisk"); this.set_applet_tooltip(_("Removable drives")); global.settings.connect('changed::' + PANEL_EDIT_MODE_KEY, Lang.bind(this, this._onPanelEditModeChanged)); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this._contentSection = new PopupMenu.PopupMenuSection(); this.menu.addMenuItem(this._contentSection); this._update(); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addAction(_("Open file manager"), function(event) { let homeFile = Gio.file_new_for_path(GLib.get_home_dir()); let homeUri = homeFile.get_uri(); Gio.app_info_launch_default_for_uri(homeUri, null); }); Main.placesManager.connect('mounts-updated', Lang.bind(this, this._update)); this._onPanelEditModeChanged(); } catch (e) { global.logError(e); } }, _onPanelEditModeChanged: function() { if (global.settings.get_boolean(PANEL_EDIT_MODE_KEY)) { this.actor.show(); } else { this._update(); } }, on_applet_clicked: function(event) { this.menu.toggle(); }, _update: function() { this._contentSection.removeAll(); let mounts = Main.placesManager.getMounts(); let any = false; for (let i = 0; i < mounts.length; i++) { if (mounts[i].isRemovable()) { this._contentSection.addMenuItem(new DriveMenuItem(mounts[i])); any = true; } } this.actor.visible = any; } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/0000775000175000017500000000000013215735076024424 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/stylesheet.css0000664000175000017500000000005513215735076027327 0ustar fabiofabio.display-subtitle { font-weight: bold; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/metadata.json0000664000175000017500000000026313215735076027100 0ustar fabiofabio{ "uuid": "xrandr@cinnamon.org", "name": "Display", "description": "XRandR monitor control applet", "icon": "preferences-desktop-display", "localedir": "/usr/share/locale" } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/applet.js0000664000175000017500000001210713215735076026250 0ustar fabiofabio/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ const Interfaces = imports.misc.interfaces; const Gdk = imports.gi.Gdk; const GLib = imports.gi.GLib; const CinnamonDesktop = imports.gi.CinnamonDesktop; const Lang = imports.lang; const Applet = imports.ui.applet; const PopupMenu = imports.ui.popupMenu; const N_ = function(e) { return e; }; const possibleRotations = [ CinnamonDesktop.RRRotation.ROTATION_0, CinnamonDesktop.RRRotation.ROTATION_90, CinnamonDesktop.RRRotation.ROTATION_180, CinnamonDesktop.RRRotation.ROTATION_270 ]; let rotations = [ [ CinnamonDesktop.RRRotation.ROTATION_0, N_("Normal") ], [ CinnamonDesktop.RRRotation.ROTATION_90, N_("Left") ], [ CinnamonDesktop.RRRotation.ROTATION_270, N_("Right") ], [ CinnamonDesktop.RRRotation.ROTATION_180, N_("Upside-down") ] ]; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.IconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.IconApplet.prototype._init.call(this, orientation, panel_height, instance_id); try { this.set_applet_icon_symbolic_name("preferences-desktop-display"); this.set_applet_tooltip(_("Display")); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); Interfaces.getDBusProxyAsync("org.cinnamon.SettingsDaemon.XRANDR_2", Lang.bind(this, function(proxy, error) { this._proxy = proxy; })); try { this._screen = new CinnamonDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() }); this._screen.init(null); } catch(e) { // an error means there is no XRandR extension global.logError(e); this.actor.hide(); return; } this._createMenu(); this._screen.connect('changed', Lang.bind(this, this._randrEvent)); } catch (e) { global.logError(e); } }, on_applet_clicked: function(event) { this.menu.toggle(); }, _randrEvent: function() { this.menu.removeAll(); this._createMenu(); }, _createMenu: function() { let config = CinnamonDesktop.RRConfig.new_current(this._screen); let outputs = config.get_outputs(); for (let i = 0; i < outputs.length; i++) { if (outputs[i].is_connected()) this._addOutputItem(config, outputs[i]); } this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addAction(_("Configure display settings..."), function() { GLib.spawn_command_line_async('cinnamon-settings display'); }); }, _addOutputItem: function(config, output) { let item = new PopupMenu.PopupMenuItem("%s (%s)".format(output.get_display_name(), output.get_name())); item.label.add_style_class_name('display-subtitle'); item.actor.reactive = false; item.actor.can_focus = false; this.menu.addMenuItem(item); let allowedRotations = this._getAllowedRotations(config, output); let currentRotation = output.get_rotation(); for (let i = 0; i < rotations.length; i++) { let [bitmask, name] = rotations[i]; if (bitmask & allowedRotations) { let item = new PopupMenu.PopupMenuItem(_(name)); if (bitmask & currentRotation) item.setShowDot(true); item.connect('activate', Lang.bind(this, function(item, event) { /* ensure config is saved so we get a backup if anything goes wrong */ config.save(); output.set_rotation(bitmask); try { config.save(); this._proxy.ApplyConfigurationRemote(0, event.get_time()); } catch (e) { global.logError('Could not save monitor configuration', e); } })); this.menu.addMenuItem(item); } } }, _getAllowedRotations: function(config, output) { let retval = 0; let current = output.get_rotation(); for (let i = 0; i < possibleRotations.length; i++) { output.set_rotation(possibleRotations[i]); if (config.applicable(this._screen)) { retval |= possibleRotations[i]; } } output.set_rotation(current); if (retval.length == 0) { // what, no rotation? // what's current then? retval = current; } return retval; } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/0000775000175000017500000000000013215735076024104 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/settings-schema.json0000664000175000017500000000017113215735076030074 0ustar fabiofabio{ "display-name" : { "type" : "switch", "default" : false, "description": "Display user name on panel" } } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/stylesheet.css0000664000175000017500000000027413215735076027012 0ustar fabiofabio.user-box { padding: .4em 1.75em; spacing: 6px; } .user-icon { border-radius: 4px; border: 2px solid #a5a5a5; } .user-label { color: #fff; font-size: 16px; margin: 6px; } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/0000775000175000017500000000000013215735076025217 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/logout-symbolic.svg0000664000175000017500000000615213215735076031074 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/shutdown-symbolic.svg0000664000175000017500000000277313215735076031443 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/switch-user-symbolic.svg0000664000175000017500000000252013215735076032033 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/guest-session-symbolic.svg0000664000175000017500000000164513215735076032375 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/icons/lock-screen-symbolic.svg0000664000175000017500000000051413215735076031764 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/metadata.json0000664000175000017500000000035313215735076026560 0ustar fabiofabio{ "description": "An applet to access your account details, switch users and quickly logout or power off the computer", "uuid": "user@cinnamon.org", "name": "User Applet", "icon": "cs-user", "max-instances": -1 } Cinnamon-3.6.7/files/usr/share/cinnamon/applets/user@cinnamon.org/applet.js0000664000175000017500000001726013215735076025735 0ustar fabiofabioconst Applet = imports.ui.applet; const Lang = imports.lang; const St = imports.gi.St; const PopupMenu = imports.ui.popupMenu; const Util = imports.misc.util; const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; const AccountsService = imports.gi.AccountsService; const GnomeSession = imports.misc.gnomeSession; const ScreenSaver = imports.misc.screenSaver; const Settings = imports.ui.settings; function MyApplet(orientation, panel_height, instance_id) { this._init(orientation, panel_height, instance_id); } MyApplet.prototype = { __proto__: Applet.TextIconApplet.prototype, _init: function(orientation, panel_height, instance_id) { Applet.TextIconApplet.prototype._init.call(this, orientation, panel_height, instance_id); this.setAllowedLayout(Applet.AllowedLayout.BOTH); try { this._session = new GnomeSession.SessionManager(); this._screenSaverProxy = new ScreenSaver.ScreenSaverProxy(); this.settings = new Settings.AppletSettings(this, "user@cinnamon.org", instance_id); this.set_applet_icon_symbolic_name("avatar-default"); this.menuManager = new PopupMenu.PopupMenuManager(this); this.menu = new Applet.AppletPopupMenu(this, orientation); this.menuManager.addMenu(this.menu); this._contentSection = new PopupMenu.PopupMenuSection(); this.menu.addMenuItem(this._contentSection); let userBox = new St.BoxLayout({ style_class: 'user-box', reactive: true, vertical: false }); this._userIcon = new St.Bin({ style_class: 'user-icon'}); this.settings.bind("display-name", "disp_name", this._updateLabel); userBox.connect('button-press-event', Lang.bind(this, function() { this.menu.toggle(); Util.spawnCommandLine("cinnamon-settings user"); })); this._userIcon.hide(); userBox.add(this._userIcon, { x_fill: true, y_fill: false, x_align: St.Align.END, y_align: St.Align.START }); this.userLabel = new St.Label(({ style_class: 'user-label'})); userBox.add(this.userLabel, { x_fill: true, y_fill: false, x_align: St.Align.END, y_align: St.Align.MIDDLE }); this.menu.addActor(userBox); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); let item = new PopupMenu.PopupIconMenuItem(_("System Settings"), "preferences-system", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { Util.spawnCommandLine("cinnamon-settings"); })); this.menu.addMenuItem(item); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); item = new PopupMenu.PopupIconMenuItem(_("Lock Screen"), "lock-screen", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { let screensaver_settings = new Gio.Settings({ schema_id: "org.cinnamon.desktop.screensaver" }); let screensaver_dialog = Gio.file_new_for_path("/usr/bin/cinnamon-screensaver-command"); if (screensaver_dialog.query_exists(null)) { if (screensaver_settings.get_boolean("ask-for-away-message")) { Util.spawnCommandLine("cinnamon-screensaver-lock-dialog"); } else { Util.spawnCommandLine("cinnamon-screensaver-command --lock"); } } else { this._screenSaverProxy.LockRemote(); } })); this.menu.addMenuItem(item); if (GLib.getenv("XDG_SEAT_PATH")) { // LightDM item = new PopupMenu.PopupIconMenuItem(_("Switch User"), "switch-user", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { Util.spawnCommandLine("cinnamon-screensaver-command --lock"); Util.spawnCommandLine("dm-tool switch-to-greeter"); })); this.menu.addMenuItem(item); } else if (GLib.file_test("/usr/bin/mdmflexiserver", GLib.FileTest.EXISTS)) { // MDM item = new PopupMenu.PopupIconMenuItem(_("Switch User"), "switch-user", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { Util.spawnCommandLine("mdmflexiserver"); })); this.menu.addMenuItem(item); } else if (GLib.file_test("/usr/bin/gdmflexiserver", GLib.FileTest.EXISTS)) { // GDM item = new PopupMenu.PopupIconMenuItem(_("Switch User"), "switch-user", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { Util.spawnCommandLine("cinnamon-screensaver-command --lock"); Util.spawnCommandLine("gdmflexiserver"); })); this.menu.addMenuItem(item); } item = new PopupMenu.PopupIconMenuItem(_("Log Out..."), "logout", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { this._session.LogoutRemote(0); })); this.menu.addMenuItem(item); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); item = new PopupMenu.PopupIconMenuItem(_("Power Off..."), "shutdown", St.IconType.SYMBOLIC); item.connect('activate', Lang.bind(this, function() { this._session.ShutdownRemote(); })); this.menu.addMenuItem(item); this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name()); this._userLoadedId = this._user.connect('notify::is_loaded', Lang.bind(this, this._onUserChanged)); this._userChangedId = this._user.connect('changed', Lang.bind(this, this._onUserChanged)); this._onUserChanged(); this.set_show_label_in_vertical_panels(false); } catch (e) { global.logError(e); } }, on_applet_clicked: function(event) { this.menu.toggle(); }, _updateLabel: function() { if (this.disp_name) { this.set_applet_label(this._user.get_real_name()); } else { this.set_applet_label(""); } }, _onUserChanged: function() { if (this._user.is_loaded) { this.set_applet_tooltip(this._user.get_real_name()); this.userLabel.set_text (this._user.get_real_name()); if (this._userIcon) { let iconFileName = this._user.get_icon_file(); let iconFile = Gio.file_new_for_path(iconFileName); let icon; if (iconFile.query_exists(null)) { icon = new Gio.FileIcon({file: iconFile}); } else { icon = new Gio.ThemedIcon({name: 'avatar-default'}); } let img = St.TextureCache.get_default().load_gicon(null, icon, 48); this._userIcon.set_child (img); this._userIcon.show(); } this._updateLabel(); } }, on_applet_removed_from_panel: function() { this.settings.finalize(); } }; function main(metadata, orientation, panel_height, instance_id) { let myApplet = new MyApplet(orientation, panel_height, instance_id); return myApplet; } Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-settings-users/0000775000175000017500000000000013215735076023644 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.ui0000664000175000017500000002472313215735076031012 0ustar fabiofabio True False center 640 480 users False True False 6 True False True False vertical 300 True False 6 in True False False False True True 0 True False 6 spread gtk-add True False True True False True 0 gtk-delete True False True True False True 1 False False 1 False True 0 True False 6 vertical True True 1 True False page 1 False True False vertical True False 6 in True False False False False True True 0 True False 6 spread gtk-add True False True True False True 0 gtk-edit True False True True False True 1 gtk-delete True False True True False True 2 False False 1 1 True False page 2 1 False Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.py0000775000175000017500000011312113215735076031017 0ustar fabiofabio#!/usr/bin/python2 import os import sys import pwd import grp import gettext import shutil import re import subprocess from random import randint import PIL from PIL import Image import gi gi.require_version("Gtk", "3.0") gi.require_version("AccountsService", "1.0") from gi.repository import Gtk, GObject, Gio, GdkPixbuf, AccountsService, GLib gettext.install("cinnamon", "/usr/share/locale") (INDEX_USER_OBJECT, INDEX_USER_PICTURE, INDEX_USER_DESCRIPTION) = range(3) (INDEX_GID, INDEX_GROUPNAME) = range(2) class GroupDialog (Gtk.Dialog): def __init__ (self, label, value, parent = None): super(GroupDialog, self).__init__(None, parent) try: self.set_modal(True) self.set_skip_taskbar_hint(True) self.set_skip_pager_hint(True) self.set_title("") table = DimmedTable() table.add_labels([label]) self.entry = Gtk.Entry() self.entry.set_text(value) self.entry.connect("changed", self._on_entry_changed) table.add_controls([self.entry]) self.set_border_width(6) box = self.get_content_area() box.add(table) self.show_all() self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK, ) self.set_response_sensitive(Gtk.ResponseType.OK, False) except Exception, detail: print detail def _on_entry_changed(self, entry): name = entry.get_text() if " " in name or name.lower() != name: entry.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, Gtk.STOCK_DIALOG_WARNING) entry.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, _("The group name cannot contain upper-case or space characters")) self.set_response_sensitive(Gtk.ResponseType.OK, False) else: entry.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) self.set_response_sensitive(Gtk.ResponseType.OK, True) if entry.get_text() == "": self.set_response_sensitive(Gtk.ResponseType.OK, False) class DimmedTable (Gtk.Table): def __init__ (self): super(DimmedTable, self).__init__() self.set_border_width(6) self.set_row_spacings(8) self.set_col_spacings(15) def add_labels(self, texts): row = 0 for text in texts: if text != None: label = Gtk.Label(text) label.set_alignment(1, 0.5) label.get_style_context().add_class("dim-label") self.attach(label, 0, 1, row, row+1, xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL) row = row + 1 def add_controls(self, controls): row = 0 for control in controls: self.attach(control, 1, 2, row, row+1) row = row + 1 class EditableEntry (Gtk.Notebook): __gsignals__ = { 'changed': (GObject.SIGNAL_RUN_FIRST, None, (str,)) } PAGE_BUTTON = 0 PAGE_ENTRY = 1 def __init__ (self): super(EditableEntry, self).__init__() self.label = Gtk.Label() self.entry = Gtk.Entry() self.button = Gtk.Button() self.button.set_alignment(0.0, 0.5) self.button.set_relief(Gtk.ReliefStyle.NONE) self.append_page(self.button, None); self.append_page(self.entry, None); self.set_current_page(0) self.set_show_tabs(False) self.set_show_border(False) self.editable = False self.show_all() self.button.connect("released", self._on_button_clicked) self.button.connect("activate", self._on_button_clicked) self.entry.connect("activate", self._on_entry_validated) self.entry.connect("changed", self._on_entry_changed) def set_text(self, text): self.button.set_label(text) self.entry.set_text(text) def _on_button_clicked(self, button): self.set_editable(True) def _on_entry_validated(self, entry): self.set_editable(False) self.emit("changed", entry.get_text()) def _on_entry_changed(self, entry): self.button.set_label(entry.get_text()) def set_editable(self, editable): if (editable): self.set_current_page(EditableEntry.PAGE_ENTRY) else: self.set_current_page(EditableEntry.PAGE_BUTTON) self.editable = editable def set_tooltip_text(self, tooltip): self.button.set_tooltip_text(tooltip) def get_editable(self): return self.editable def get_text(self): return self.entry.get_text() class PasswordDialog(Gtk.Dialog): def __init__ (self, user, password_mask, group_mask, parent = None): super(PasswordDialog, self).__init__(None, parent) self.user = user self.password_mask = password_mask self.group_mask = group_mask self.set_modal(True) self.set_skip_taskbar_hint(True) self.set_skip_pager_hint(True) self.set_title(_("Change Password")) table = DimmedTable() table.add_labels([_("New password"), None, _("Confirm password")]) self.new_password = Gtk.Entry() self.new_password.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, "view-refresh") self.new_password.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, _("Generate a password")) self.new_password.connect("icon-release", self._on_new_password_icon_released) self.new_password.connect("changed", self._on_passwords_changed) table.attach(self.new_password, 1, 3, 0, 1) self.strengh_indicator = Gtk.ProgressBar() self.strengh_indicator.set_tooltip_text(_("Your new password needs to be at least 8 characters long")) self.strengh_indicator.set_fraction(0.0) table.attach(self.strengh_indicator, 1, 2, 1, 2, xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL) self.strengh_indicator.set_size_request(-1, 1) self.strengh_label = Gtk.Label() self.strengh_label.set_tooltip_text(_("Your new password needs to be at least 8 characters long")) self.strengh_label.set_alignment(1, 0.5) table.attach(self.strengh_label, 2, 3, 1, 2) self.confirm_password = Gtk.Entry() self.confirm_password.connect("changed", self._on_passwords_changed) table.attach(self.confirm_password, 1, 3, 2, 3) self.show_password = Gtk.CheckButton(_("Show password")) self.show_password.connect('toggled', self._on_show_password_toggled) table.attach(self.show_password, 1, 3, 3, 4) self.set_border_width(6) box = self.get_content_area() box.add(table) self.show_all() self.infobar = Gtk.InfoBar() self.infobar.set_message_type(Gtk.MessageType.ERROR) label = Gtk.Label(_("An error occurred. Your password was not changed.")) content = self.infobar.get_content_area() content.add(label) table.attach(self.infobar, 0, 3, 4, 5) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, _("Change"), Gtk.ResponseType.OK, ) self.set_passwords_visibility() self.set_response_sensitive(Gtk.ResponseType.OK, False) self.infobar.hide() self.connect("response", self._on_response) def _on_response(self, dialog, response_id): if response_id == Gtk.ResponseType.OK: self.change_password() else: self.destroy() def change_password(self): newpass = self.new_password.get_text() self.user.set_password(newpass, "") mask = self.group_mask.get_text() if "nopasswdlogin" in mask: subprocess.call(["gpasswd", "-d", self.user.get_user_name(), "nopasswdlogin"]) mask = mask.split(", ") mask.remove("nopasswdlogin") mask = ", ".join(mask) self.group_mask.set_text(mask) self.password_mask.set_text(u'\u2022\u2022\u2022\u2022\u2022\u2022') self.destroy() def set_passwords_visibility(self): visible = self.show_password.get_active() self.new_password.set_visibility(visible) self.confirm_password.set_visibility(visible) def _on_new_password_icon_released(self, widget, icon_pos, event): self.infobar.hide() self.show_password.set_active(True) characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-" newpass = "" for i in range (8): index = randint(0, len(characters) -1) newpass = newpass + characters[index] self.new_password.set_text(newpass) self.confirm_password.set_text(newpass) self.check_passwords() def _on_show_password_toggled(self, widget): self.set_passwords_visibility() # Based on setPasswordStrength() in Mozilla Seamonkey, which is tri-licensed under MPL 1.1, GPL 2.0, and LGPL 2.1. # Forked from Ubiquity validation.py def password_strength(self, password): upper = lower = digit = symbol = 0 for char in password: if char.isdigit(): digit += 1 elif char.islower(): lower += 1 elif char.isupper(): upper += 1 else: symbol += 1 length = len(password) length = min(length,4) digit = min(digit,3) upper = min(upper,3) symbol = min(symbol,3) strength = ( ((length * 0.1) - 0.2) + (digit * 0.1) + (symbol * 0.15) + (upper * 0.1)) if strength > 1: strength = 1 if strength < 0: strength = 0 return strength def _on_passwords_changed(self, widget): self.infobar.hide() new_password = self.new_password.get_text() confirm_password = self.confirm_password.get_text() strength = self.password_strength(new_password) if new_password != confirm_password: self.confirm_password.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, Gtk.STOCK_DIALOG_WARNING) self.confirm_password.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, _("Passwords do not match")) else: self.confirm_password.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) if len(new_password) < 8: self.strengh_label.set_text(_("Too short")) self.strengh_indicator.set_fraction(0.0) elif strength < 0.5: self.strengh_label.set_text(_("Weak")) self.strengh_indicator.set_fraction(0.2) elif strength < 0.75: self.strengh_label.set_text(_("Fair")) self.strengh_indicator.set_fraction(0.4) elif strength < 0.9: self.strengh_label.set_text(_("Good")) self.strengh_indicator.set_fraction(0.6) else: self.strengh_label.set_text(_("Strong")) self.strengh_indicator.set_fraction(1.0) self.check_passwords() def check_passwords(self): new_password = self.new_password.get_text() confirm_password = self.confirm_password.get_text() if len(new_password) >= 8 and new_password == confirm_password: self.set_response_sensitive(Gtk.ResponseType.OK, True) else: self.set_response_sensitive(Gtk.ResponseType.OK, False) class NewUserDialog(Gtk.Dialog): def __init__ (self, parent = None): super(NewUserDialog, self).__init__(None, parent) try: self.set_modal(True) self.set_skip_taskbar_hint(True) self.set_skip_pager_hint(True) self.set_title("") self.account_type_combo = Gtk.ComboBoxText() self.account_type_combo.append_text(_("Standard")) self.account_type_combo.append_text(_("Administrator")) self.account_type_combo.set_active(0) self.realname_entry = Gtk.Entry() self.realname_entry.connect("changed", self._on_info_changed) self.username_entry = Gtk.Entry() self.username_entry.connect("changed", self._on_info_changed) label = Gtk.Label() label.set_markup(_("The username must consist of only:\n - lower case letters (a-z)\n - numerals (0-9)\n - '.', '-', and '_' characters")) table = DimmedTable() table.add_labels([_("Account Type"), _("Full Name"), _("Username")]) table.add_controls([self.account_type_combo, self.realname_entry, self.username_entry]) self.set_border_width(6) box = self.get_content_area() box.add(table) box.add(label) self.show_all() self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_ADD, Gtk.ResponseType.OK, ) self.set_response_sensitive(Gtk.ResponseType.OK, False) except Exception, detail: print detail def _on_info_changed(self, widget): fullname = self.realname_entry.get_text() username = self.username_entry.get_text() valid = True if re.search('[^a-z0-9_.-]', username): self.username_entry.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, Gtk.STOCK_DIALOG_WARNING) self.username_entry.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, _("Invalid username")) valid = False else: self.username_entry.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, None) if username == "" or fullname == "": valid = False self.set_response_sensitive(Gtk.ResponseType.OK, valid) class GroupsDialog(Gtk.Dialog): def __init__ (self, username, parent = None): super(GroupsDialog, self).__init__(None, parent) try: self.set_modal(True) self.set_skip_taskbar_hint(True) self.set_skip_pager_hint(True) self.set_title("") self.set_default_size(200, 480) scrolled = Gtk.ScrolledWindow() viewport = Gtk.Viewport() vbox = Gtk.VBox() self.checkboxes = [] groups = sorted(grp.getgrall(), key=lambda x: x[0], reverse=False) for group in groups: checkbox = Gtk.CheckButton(group[0]) self.checkboxes.append(checkbox) vbox.add(checkbox) if username in group[3]: checkbox.set_active(True) viewport.add(vbox) scrolled.add(viewport) self.set_border_width(6) box = self.get_content_area() box.pack_start(scrolled, True, True, 0) self.show_all() self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK, ) except Exception, detail: print detail def get_selected_groups(self): groups = [] for checkbox in self.checkboxes: if checkbox.get_active(): groups.append(checkbox.get_label()) return groups class Module: def __init__(self): try: self.builder = Gtk.Builder() self.builder.add_from_file("/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.ui") self.window = self.builder.get_object("main_window") self.window.connect("destroy", Gtk.main_quit) self.window.set_title(_("Users and Groups")) self.builder.get_object("label_users").set_label(_("Users")) self.builder.get_object("label_groups").set_label(_("Groups")) self.builder.get_object("button_add_user").connect("clicked", self.on_user_addition) self.builder.get_object("button_delete_user").connect("clicked", self.on_user_deletion) self.builder.get_object("button_add_group").connect("clicked", self.on_group_addition) self.builder.get_object("button_edit_group").connect("clicked", self.on_group_edition) self.builder.get_object("button_delete_group").connect("clicked", self.on_group_deletion) self.users = Gtk.TreeStore(object, GdkPixbuf.Pixbuf, str) self.users.set_sort_column_id(2, Gtk.SortType.ASCENDING) self.groups = Gtk.TreeStore(int, str) self.groups.set_sort_column_id(1, Gtk.SortType.ASCENDING) self.users_treeview = self.builder.get_object("treeview_users") self.users_treeview.set_rules_hint(True) self.groups_treeview = self.builder.get_object("treeview_groups") self.users_treeview.get_selection().connect("changed", self.on_user_selection) self.groups_treeview.get_selection().connect("changed", self.on_group_selection) column = Gtk.TreeViewColumn() cell = Gtk.CellRendererPixbuf() column.pack_start(cell, True) column.add_attribute(cell, 'pixbuf', INDEX_USER_PICTURE) cell.set_property('ypad', 1) self.users_treeview.append_column(column) column = Gtk.TreeViewColumn() cell = Gtk.CellRendererText() column.pack_start(cell, True) column.add_attribute(cell, 'markup', INDEX_USER_DESCRIPTION) self.users_treeview.append_column(column) column = Gtk.TreeViewColumn() cell = Gtk.CellRendererText() column.pack_start(cell, True) column.add_attribute(cell, 'text', INDEX_GROUPNAME) column.set_sort_column_id(1) self.groups_treeview.append_column(column) self.builder.get_object("button_delete_user").set_sensitive(False) self.builder.get_object("button_edit_group").set_sensitive(False) self.builder.get_object("button_delete_group").set_sensitive(False) self.face_button = Gtk.Button() self.face_image = Gtk.Image() self.face_image.set_size_request(96, 96) self.face_button.set_image(self.face_image) self.face_image.set_from_file("/usr/share/cinnamon/faces/user-generic.png") self.face_button.set_alignment(0.0, 0.5) self.face_button.set_tooltip_text(_("Click to change the picture")) self.menu = Gtk.Menu() separator = Gtk.SeparatorMenuItem() face_browse_menuitem = Gtk.MenuItem(_("Browse for more pictures...")) face_browse_menuitem.connect('activate', self._on_face_browse_menuitem_activated) self.face_button.connect("button-release-event", self.menu_display) row = 0 col = 0 num_cols = 4 face_dirs = ["/usr/share/cinnamon/faces"] for face_dir in face_dirs: if os.path.exists(face_dir): pictures = sorted(os.listdir(face_dir)) for picture in pictures: path = os.path.join(face_dir, picture) file = Gio.File.new_for_path(path) file_icon = Gio.FileIcon.new(file) image = Gtk.Image.new_from_gicon (file_icon, Gtk.IconSize.DIALOG) menuitem = Gtk.MenuItem() menuitem.add(image) menuitem.connect('activate', self._on_face_menuitem_activated, path) self.menu.attach(menuitem, col, col+1, row, row+1) col = (col+1) % num_cols if (col == 0): row = row + 1 row = row + 1 self.menu.attach(separator, 0, 4, row, row+1) self.menu.attach(face_browse_menuitem, 0, 4, row+2, row+3) self.account_type_combo = Gtk.ComboBoxText() self.account_type_combo.append_text(_("Standard")) self.account_type_combo.append_text(_("Administrator")) self.account_type_combo.connect("changed", self._on_accounttype_changed) self.realname_entry = EditableEntry() self.realname_entry.connect("changed", self._on_realname_changed) self.realname_entry.set_tooltip_text(_("Click to change the name")) self.password_mask = Gtk.Label() self.password_mask.set_alignment(0.0, 0.5) self.password_button = Gtk.Button() self.password_button.add(self.password_mask) self.password_button.set_relief(Gtk.ReliefStyle.NONE) self.password_button.set_tooltip_text(_("Click to change the password")) self.password_button.connect('activate', self._on_password_button_clicked) self.password_button.connect('released', self._on_password_button_clicked) self.groups_label = Gtk.Label() self.groups_label.set_line_wrap(True) self.groups_label.set_alignment(0, 0.5) self.groups_button = Gtk.Button() self.groups_button.add(self.groups_label) self.groups_button.set_relief(Gtk.ReliefStyle.NONE) self.groups_button.set_tooltip_text(_("Click to change the groups")) self.groups_button.connect("clicked", self._on_groups_button_clicked) box = Gtk.Box() box.pack_start(self.face_button, False, False, 0) table = DimmedTable() table.add_labels([_("Picture"), _("Account Type"), _("Name"), _("Password"), _("Groups")]) table.add_controls([box, self.account_type_combo, self.realname_entry, self.password_button, self.groups_button]) self.builder.get_object("box_users").add(table) self.accountService = AccountsService.UserManager.get_default() self.accountService.connect('notify::is-loaded', self.on_accounts_service_loaded) self.load_groups() self.window.show_all() self.builder.get_object("box_users").hide() except Exception, detail: print detail def _on_password_button_clicked(self, widget): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] dialog = PasswordDialog(user, self.password_mask, self.groups_label, self.window) response = dialog.run() def _on_groups_button_clicked(self, widget): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] dialog = GroupsDialog(user.get_user_name(), self.window) response = dialog.run() if response == Gtk.ResponseType.OK: groups = dialog.get_selected_groups() subprocess.call(["usermod", user.get_user_name(), "-G", ",".join(groups)]) groups.sort() self.groups_label.set_text(", ".join(groups)) dialog.destroy() def _on_accounttype_changed(self, combobox): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] if self.account_type_combo.get_active() == 1: user.set_account_type(AccountsService.UserAccountType.ADMINISTRATOR) else: user.set_account_type(AccountsService.UserAccountType.STANDARD) groups = [] for group in grp.getgrall(): if user.get_user_name() in group[3]: groups.append(group[0]) groups.sort() self.groups_label.set_text(", ".join(groups)) def _on_realname_changed(self, widget, text): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] user.set_real_name(text) description = "%s\n%s" % (text, user.get_user_name()) model.set_value(treeiter, INDEX_USER_DESCRIPTION, description) def _on_face_browse_menuitem_activated(self, menuitem): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] dialog = Gtk.FileChooserDialog(None, None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) filter = Gtk.FileFilter() filter.set_name(_("Images")) filter.add_mime_type("image/*") dialog.add_filter(filter) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.frame = Gtk.Frame(visible=False, no_show_all=True) preview = Gtk.Image(visible=True) box.pack_start(self.frame, False, False, 0) self.frame.add(preview) dialog.set_preview_widget(box) dialog.set_preview_widget_active(True) dialog.set_use_preview_label(False) box.set_margin_end(12) box.set_margin_top(12) box.set_size_request(128, -1) dialog.connect("update-preview", self.update_preview_cb, preview) response = dialog.run() if response == Gtk.ResponseType.OK: path = dialog.get_filename() image = PIL.Image.open(path) image.thumbnail((96, 96), Image.ANTIALIAS) face_path = os.path.join(user.get_home_dir(), ".face") image.save(face_path, "png") user.set_icon_file(face_path) self.face_image.set_from_file(face_path) model.set_value(treeiter, INDEX_USER_PICTURE, GdkPixbuf.Pixbuf.new_from_file_at_size(face_path, 48, 48)) model.row_changed(model.get_path(treeiter), treeiter) dialog.destroy() def update_preview_cb (self, dialog, preview): # Different widths make the dialog look really crappy as it resizes - # constrain the width and adjust the height to keep perspective. filename = dialog.get_preview_filename() if filename is not None: if os.path.isfile(filename): try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, 128, 128) if pixbuf is not None: preview.set_from_pixbuf(pixbuf) self.frame.show() return except GLib.Error as e: print("Unable to generate preview for file '%s' - %s\n" % (filename, e.message)) preview.clear() self.frame.hide() def _on_face_menuitem_activated(self, menuitem, path): if os.path.exists(path): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] user.set_icon_file(path) self.face_image.set_from_file(path) shutil.copy(path, os.path.join(user.get_home_dir(), ".face")) model.set_value(treeiter, INDEX_USER_PICTURE, GdkPixbuf.Pixbuf.new_from_file_at_size(path, 48, 48)) model.row_changed(model.get_path(treeiter), treeiter) def menu_display(self, widget, event): if event.button == 1: self.menu.popup(None, None, self.popup_menu_below_button, self.face_button, event.button, event.time) self.menu.show_all() def popup_menu_below_button (self, *args): # the introspection for GtkMenuPositionFunc seems to change with each Gtk version, # this is a workaround to make sure we get the menu and the widget menu = args[0] widget = args[-1] # here I get the coordinates of the button relative to # window (self.window) button_x, button_y = widget.get_allocation().x, widget.get_allocation().y # now convert them to X11-relative unused_var, window_x, window_y = widget.get_window().get_origin() x = window_x + button_x y = window_y + button_y # now move the menu below the button y += widget.get_allocation().height push_in = True # push_in is True so all menu is always inside screen return (x, y, push_in) def on_accounts_service_loaded(self, user, param): self.load_users() def load_users(self): self.users.clear() users = self.accountService.list_users() for user in users: if os.path.exists(user.get_icon_file()): pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(user.get_icon_file(), 48, 48) else: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size("/usr/share/cinnamon/faces/user-generic.png", 48, 48) description = "%s\n%s" % (user.get_real_name(), user.get_user_name()) piter = self.users.append(None, [user, pixbuf, description]) self.users_treeview.set_model(self.users) def load_groups(self): self.groups.clear() groups = sorted(grp.getgrall(), key=lambda x: x[0], reverse=False) for group in groups: (gr_name, gr_passwd, gr_gid, gr_mem) = group piter = self.groups.append(None, [gr_gid, gr_name]) self.groups_treeview.set_model(self.groups) #USER CALLBACKS def on_user_selection(self, selection): self.password_button.set_sensitive(True) self.password_button.set_tooltip_text("") model, treeiter = selection.get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] self.builder.get_object("button_delete_user").set_sensitive(True) self.realname_entry.set_text(user.get_real_name()) if user.get_password_mode() == AccountsService.UserPasswordMode.REGULAR: self.password_mask.set_text(u'\u2022\u2022\u2022\u2022\u2022\u2022') elif user.get_password_mode() == AccountsService.UserPasswordMode.NONE: self.password_mask.set_markup("%s" % _("No password set")) else: self.password_mask.set_text(_("Set at login")) if user.get_account_type() == AccountsService.UserAccountType.ADMINISTRATOR: self.account_type_combo.set_active(1) else: self.account_type_combo.set_active(0) pixbuf = None path = user.get_icon_file() message = "" if os.path.exists(path): try: pixbuf = GdkPixbuf.Pixbuf.new_from_file(path) except GLib.Error as e: message = "Could not load pixbuf from '%s': %s" % (path, e.message) error = True if pixbuf != None: if pixbuf.get_height() > 96 or pixbuf.get_width() > 96: try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(path, 96, 96) except GLib.Error as e: message = "Could not scale pixbuf from '%s': %s" % (path, e.message) error = True if pixbuf: self.face_image.set_from_pixbuf(pixbuf) else: if message != "": print message self.face_image.set_from_file("/usr/share/cinnamon/faces/user-generic.png") groups = [] for group in grp.getgrall(): if user.get_user_name() in group[3]: groups.append(group[0]) groups.sort() self.groups_label.set_text(", ".join(groups)) self.builder.get_object("box_users").show() # Count the number of connections for the currently logged-in user connections = int(subprocess.check_output(["w", "-hs", user.get_user_name()]).count("\n")) if connections > 0: self.builder.get_object("button_delete_user").set_sensitive(False) self.builder.get_object("button_delete_user").set_tooltip_text(_("This user is currently logged in")) else: self.builder.get_object("button_delete_user").set_sensitive(True) self.builder.get_object("button_delete_user").set_tooltip_text("") if os.path.exists("/home/.ecryptfs/%s" % user.get_user_name()): self.password_button.set_sensitive(False) self.password_button.set_tooltip_text(_("The user's home directory is encrypted. To preserve access to the encrypted directory, only the user should change this password.")) else: self.builder.get_object("button_delete_user").set_sensitive(False) self.builder.get_object("box_users").hide() def on_user_deletion(self, event): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: user = model[treeiter][INDEX_USER_OBJECT] message = _("Are you sure you want to permanently delete %s and all the files associated with this user?") % user.get_user_name() d = Gtk.MessageDialog(self.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, message) d.set_markup(message) d.set_default_response(Gtk.ResponseType.NO) r = d.run() d.destroy() if r == Gtk.ResponseType.YES: result = self.accountService.delete_user(user, True) if result: model.remove(treeiter) self.load_groups() def on_user_addition(self, event): dialog = NewUserDialog(self.window) response = dialog.run() if response == Gtk.ResponseType.OK: if dialog.account_type_combo.get_active() == 1: account_type = AccountsService.UserAccountType.ADMINISTRATOR else: account_type = AccountsService.UserAccountType.STANDARD fullname = dialog.realname_entry.get_text() username = dialog.username_entry.get_text() new_user = self.accountService.create_user(username, fullname, account_type) new_user.set_password_mode(AccountsService.UserPasswordMode.NONE) pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size("/usr/share/cinnamon/faces/user-generic.png", 48, 48) description = "%s\n%s" % (fullname, username) piter = self.users.append(None, [new_user, pixbuf, description]) # Add the user to his/her own group and sudo if Administrator was selected if dialog.account_type_combo.get_active() == 1: subprocess.call(["usermod", username, "-G", "%s,sudo,nopasswdlogin" % username]) else: subprocess.call(["usermod", username, "-G", "%s,nopasswdlogin" % username]) self.load_groups() dialog.destroy() def on_user_edition(self, event): model, treeiter = self.users_treeview.get_selection().get_selected() if treeiter != None: print "Editing user %s" % model[treeiter][INDEX_USER_OBJECT].get_user_name() # GROUPS CALLBACKS def on_group_selection(self, selection): model, treeiter = selection.get_selected() if treeiter != None: self.builder.get_object("button_edit_group").set_sensitive(True) self.builder.get_object("button_delete_group").set_sensitive(True) self.builder.get_object("button_delete_group").set_tooltip_text("") group = model[treeiter][INDEX_GROUPNAME] for p in pwd.getpwall(): username = p[0] primary_group = grp.getgrgid(p[3])[0] if primary_group == group: self.builder.get_object("button_delete_group").set_sensitive(False) self.builder.get_object("button_delete_group").set_tooltip_text(_("This group is set as %s's primary group") % username) break else: self.builder.get_object("button_edit_group").set_sensitive(False) self.builder.get_object("button_delete_group").set_sensitive(False) self.builder.get_object("button_delete_group").set_tooltip_text("") def on_group_deletion(self, event): model, treeiter = self.groups_treeview.get_selection().get_selected() if treeiter != None: group = model[treeiter][INDEX_GROUPNAME] message = _("Are you sure you want to permanently delete %s?") % group d = Gtk.MessageDialog(self.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, message) d.set_markup(message) d.set_default_response(Gtk.ResponseType.NO) r = d.run() if r == Gtk.ResponseType.YES: subprocess.call(["groupdel", group]) self.load_groups() d.destroy() def on_group_addition(self, event): dialog = GroupDialog(_("Group Name"), "", self.window) response = dialog.run() if response == Gtk.ResponseType.OK: subprocess.call(["groupadd", dialog.entry.get_text().lower()]) self.load_groups() dialog.destroy() def on_group_edition(self, event): model, treeiter = self.groups_treeview.get_selection().get_selected() if treeiter != None: group = model[treeiter][INDEX_GROUPNAME] dialog = GroupDialog(_("Group Name"), group, self.window) response = dialog.run() if response == Gtk.ResponseType.OK: subprocess.call(["groupmod", group, "-n", dialog.entry.get_text().lower()]) self.load_groups() dialog.destroy() if __name__ == "__main__": module = Module() Gtk.main() Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-settings-users/cinnamon-settings-users.svg0000664000175000017500000010341013215735076031163 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-slideshow/0000775000175000017500000000000013215735076022646 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-slideshow/cinnamon-slideshow.py0000775000175000017500000003233113215735076027026 0ustar fabiofabio#! /usr/bin/python2 from gi.repository import Gio, GLib import dbus, dbus.service, dbus.glib from dbus.mainloop.glib import DBusGMainLoop import random import os, locale from xml.etree import ElementTree SLIDESHOW_DBUS_NAME = "org.Cinnamon.Slideshow" SLIDESHOW_DBUS_PATH = "/org/Cinnamon/Slideshow" BACKGROUND_COLLECTION_TYPE_DIRECTORY = "directory" BACKGROUND_COLLECTION_TYPE_XML = "xml" class CinnamonSlideshow(dbus.service.Object): def __init__(self): bus_name = dbus.service.BusName(SLIDESHOW_DBUS_NAME, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, SLIDESHOW_DBUS_PATH) self.slideshow_settings = Gio.Settings(schema="org.cinnamon.desktop.background.slideshow") self.background_settings = Gio.Settings(schema="org.cinnamon.desktop.background") if self.slideshow_settings.get_boolean("slideshow-paused"): self.slideshow_settings.set_boolean("slideshow-paused", False) self.image_playlist = [] self.used_image_playlist = [] self.images_ready = False self.update_in_progress = False self.current_image = self.background_settings.get_string("picture-uri") self.update_id = 0 self.loop_counter = self.slideshow_settings.get_int("delay") self.folder_monitor = None self.folder_monitor_id = 0 @dbus.service.method(SLIDESHOW_DBUS_NAME, in_signature='', out_signature='') def begin(self): self.setup_slideshow() @dbus.service.method(SLIDESHOW_DBUS_NAME, in_signature='', out_signature='') def end(self): if self.update_id > 0: GLib.source_remove(self.update_id) self.update_id = 0 ml.quit() @dbus.service.method(SLIDESHOW_DBUS_NAME, in_signature='', out_signature='') def getNextImage(self): if self.update_id > 0: GLib.source_remove(self.update_id) self.update_id = 0 self.loop_counter = self.slideshow_settings.get_int("delay") self.start_mainloop() def setup_slideshow(self): self.load_settings() self.connect_signals() self.gather_images() if self.collection_type == BACKGROUND_COLLECTION_TYPE_DIRECTORY: self.connect_folder_monitor() self.start_mainloop() def format_source(self, type, path): # returns 'type://path' return ("%s://%s" % (type, path)) def load_settings(self): self.random_order = self.slideshow_settings.get_boolean("random-order") self.collection = self.slideshow_settings.get_string("image-source") self.collection_path = "" self.collection_type = None if self.collection != "" and "://" in self.collection: (self.collection_type, self.collection_path) = self.collection.split("://") self.collection_path = os.path.expanduser(self.collection_path) def connect_signals(self): self.slideshow_settings.connect("changed::image-source", self.on_slideshow_source_changed) self.slideshow_settings.connect("changed::random-order", self.on_random_order_changed) self.background_settings.connect("changed::picture-uri", self.on_picture_uri_changed) def connect_folder_monitor(self): folder_path = Gio.file_new_for_path(self.collection_path) self.folder_monitor = folder_path.monitor_directory(0, None) self.folder_monitor_id = self.folder_monitor.connect("changed", self.on_monitored_folder_changed) def disconnect_folder_monitor(self): if self.folder_monitor_id > 0: self.folder_monitor.disconnect(self.folder_monitor_id) self.folder_monitor_id = 0 def gather_images(self): if self.collection_type == BACKGROUND_COLLECTION_TYPE_DIRECTORY: folder_at_path = Gio.file_new_for_path(self.collection_path) if folder_at_path.query_exists(None): folder_at_path.enumerate_children_async("standard::name,standard::type,standard::content-type", Gio.FileQueryInfoFlags.NONE, GLib.PRIORITY_LOW, None, self.gather_images_cb, None) elif self.collection_type == BACKGROUND_COLLECTION_TYPE_XML: pictures = self.parse_xml_backgrounds_list(self.collection_path) for picture in pictures: filename = picture["filename"] self.add_image_to_playlist(filename) def gather_images_cb(self, obj, res, user_data): all_files = [] enumerator = obj.enumerate_children_finish(res) def on_next_file_complete(obj, res, user_data=all_files): files = obj.next_files_finish(res) file_list = all_files if len(files) is not 0: file_list = file_list.extend(files) enumerator.next_files_async(100, GLib.PRIORITY_LOW, None, on_next_file_complete, None) else: enumerator.close(None) self.ensure_file_is_image(file_list) enumerator.next_files_async(100, GLib.PRIORITY_LOW, None, on_next_file_complete, all_files) def ensure_file_is_image(self, file_list): for item in file_list: file_type = item.get_file_type(); if file_type is not Gio.FileType.DIRECTORY: file_contents = item.get_content_type(); if file_contents.startswith("image"): self.add_image_to_playlist(self.collection_path + "/" + item.get_name()) def add_image_to_playlist(self, file_path): image = Gio.file_new_for_path(file_path) image_uri = image.get_uri(); self.image_playlist.append(image_uri) if self.collection_type == BACKGROUND_COLLECTION_TYPE_DIRECTORY: self.image_playlist.sort() self.images_ready = True def on_slideshow_source_changed(self, settings, key): if self.update_id > 0: GLib.source_remove(self.update_id) self.update_id = 0 self.disconnect_folder_monitor() self.image_playlist = [] self.used_image_playlist = [] self.images_ready = False self.collection = self.slideshow_settings.get_string("image-source") self.collection_path = "" self.collection_type = None if self.collection != "" and "://" in self.collection: (self.collection_type, self.collection_path) = self.collection.split("://") self.collection_path = os.path.expanduser(self.collection_path) if self.collection_type == BACKGROUND_COLLECTION_TYPE_DIRECTORY: self.connect_folder_monitor() self.gather_images() self.loop_counter = self.slideshow_settings.get_int("delay") self.start_mainloop() def on_monitored_folder_changed(self, monitor, file1, file2, event_type): try: if event_type == Gio.FileMonitorEvent.DELETED: file_uri = file1.get_uri(); if self.image_playlist.count(file_uri) > 0: index_to_remove = self.image_playlist.index(file_uri) del self.image_playlist[index_to_remove] elif self.used_image_playlist.count(file_uri) > 0: index_to_remove = self.used_image_playlist.index(file_uri) del self.used_image_playlist[index_to_remove] if event_type == Gio.FileMonitorEvent.CREATED: file_path = file1.get_path() file_info = file1.query_info("standard::type,standard::content-type", Gio.FileQueryInfoFlags.NONE, None) file_type = file_info.get_file_type() if file_type is not Gio.FileType.DIRECTORY: file_contents = file_info.get_content_type(); if file_contents.startswith("image"): self.add_image_to_playlist(file_path) except: pass def on_random_order_changed(self, settings, key): self.random_order = self.slideshow_settings.get_boolean("random-order") def on_picture_uri_changed(self, settings, key): if self.update_in_progress: return else: if self.background_settings.get_string("picture-uri") != self.current_image: self.slideshow_settings.set_boolean("slideshow-enabled", False) def start_mainloop(self): if self.update_id > 0: GLib.source_remove(self.update_id) self.update_id = 0 if not self.images_ready: self.update_id = GLib.timeout_add_seconds(1, self.start_mainloop) else: if self.loop_counter >= self.slideshow_settings.get_int("delay") and not self.slideshow_settings.get_boolean("slideshow-paused"): self.loop_counter = 1 self.update_background() self.update_id = GLib.timeout_add_seconds(60, self.start_mainloop) else: self.loop_counter = self.loop_counter + 1 self.update_id = GLib.timeout_add_seconds(60, self.start_mainloop) def update_background(self): if self.update_in_progress: return self.update_in_progress = True if len(self.image_playlist) == 0: self.move_used_images_to_original_playlist() next_image = self.get_next_image_from_list() if next_image is not None: self.background_settings.set_string("picture-uri", next_image) self.current_image = next_image self.update_in_progress = False def get_next_image_from_list(self): if self.random_order: index = random.randint(0, len(self.image_playlist) - 1) image = self.image_playlist[index] else: index = 0 image = self.image_playlist[index] self.move_image_to_used_playlist(index, image) return image def move_image_to_used_playlist(self, index, image): self.image_playlist.pop(index) self.used_image_playlist.append(image) def move_used_images_to_original_playlist(self): self.image_playlist = self.used_image_playlist if self.collection_type == BACKGROUND_COLLECTION_TYPE_DIRECTORY: self.image_playlist.sort() self.used_image_playlist = [] ########### TAKEN FROM CS_BACKGROUND def splitLocaleCode(self, localeCode): loc = localeCode.partition("_") loc = (loc[0], loc[2]) return loc def getLocalWallpaperName(self, names, loc): result = "" mainLocFound = False for wp in names: wpLoc = wp[0] wpName = wp[1] if wpLoc == ("", ""): if not mainLocFound: result = wpName elif wpLoc[0] == loc[0]: if wpLoc[1] == loc[1]: return wpName elif wpLoc[1] == "": result = wpName mainLocFound = True return result def parse_xml_backgrounds_list(self, filename): try: locAttrName = "{http://www.w3.org/XML/1998/namespace}lang" loc = self.splitLocaleCode(locale.getdefaultlocale()[0]) res = [] subLocaleFound = False f = open(filename) rootNode = ElementTree.fromstring(f.read()) f.close() if rootNode.tag == "wallpapers": for wallpaperNode in rootNode: if wallpaperNode.tag == "wallpaper" and wallpaperNode.get("deleted") != "true": wallpaperData = {"metadataFile": filename} names = [] for prop in wallpaperNode: if type(prop.tag) == str: if prop.tag != "name": wallpaperData[prop.tag] = prop.text else: propAttr = prop.attrib wpName = prop.text locName = self.splitLocaleCode(propAttr.get(locAttrName)) if propAttr.has_key(locAttrName) else ("", "") names.append((locName, wpName)) wallpaperData["name"] = self.getLocalWallpaperName(names, loc) if "filename" in wallpaperData and wallpaperData["filename"] != "" and os.path.exists(wallpaperData["filename"]) and os.access(wallpaperData["filename"], os.R_OK): if wallpaperData["name"] == "": wallpaperData["name"] = os.path.basename(wallpaperData["filename"]) res.append(wallpaperData) return res except Exception, detail: print detail return [] ############### if __name__ == "__main__": DBusGMainLoop(set_as_default=True) sessionBus = dbus.SessionBus () request = sessionBus.request_name(SLIDESHOW_DBUS_NAME, dbus.bus.NAME_FLAG_DO_NOT_QUEUE) if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS: slideshow = CinnamonSlideshow() else: print "cinnamon-slideshow already running." quit() ml = GLib.MainLoop.new(None, True) ml.run() Cinnamon-3.6.7/files/usr/share/cinnamon/icons/0000775000175000017500000000000013215735076020160 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/icons/move-symbolic.svg0000664000175000017500000000230513215735076023466 0ustar fabiofabio Cinnamon-3.6.7/files/usr/share/cinnamon/sounds/0000775000175000017500000000000013215735076020360 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/sounds/bell.ogg0000664000175000017500000001135313215735076021777 0ustar fabiofabioOggSs<*&vorbisDwOggSsYvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget) TITLE=bell COMMENTS= vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s .J%촀ڄT_8DVdE(u]egg(Y*K"UZk{0@BDFHJLNP@OggSGd1 MWLN>'ݿ@3}r0 MAaԷq l bec`1@]Ib*#g2^-˻We2rsKΧfEkje*k].,ІlDT u,'^²"އsJ( U)#ҲŚȊAYٟiaizL\]tӖ2Ae S4U@[ ^DEDKkctj"*f{bʹq]ͶEQ@(b&QٚK_ȑCinnamon-3.6.7/files/usr/share/cinnamon/sounds/togglekeys-sound-off.ogg0000664000175000017500000001251013215735076025130 0ustar fabiofabioOggScL$vorbisqOggScQGvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget) TRACKNUMBER=1 GENRE=OtherTITLE=togglekeys-sound-onDATE=2016-01-02vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS'cS TSTQP8=l/=q{. i o218,X4^kYM-Ut%Ti =uzJdL1_{F۳%؎b6_]9]Rȁ?5]iNl%!ա(al#*c_r\Lia|&[ 7/g@u+2M0`M5C"Z] UԬKJ.0 V5!$gKtڅ~{ ^_K>t!Ks~~_g^qb 12NFFh 3# >X&aνfx12m=fޝEY^Ų9,G pYe,rr4Ǡ%|öh{F= DNG,FH( -2@dqT)* HLnYXD[DV 2  @%b~^5co[Tn!ɶynMswc D~8kkΘ@;@\z5Ϯ)aZ^]eb>ea`z.RQ,`ZYJj 0X{ALe)ZY g% `ӈZ])pGd%Ȳ垶Q!}E1QeG9{z,+Y]Va9Ji` otY5MJ`+pY Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/0000775000175000017500000000000013215735076021213 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cursors/0000775000175000017500000000000013215735076022713 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cursors/DMZ-White.png0000664000175000017500000000163613215735076025137 0ustar fabiofabioPNG  IHDR szzbKGD pHYs  tIME  n+IDATX՗MHee;E1N9yc0&e-b6ΪEhӢ mBHN (J4?p!Q1Q3\Mr}owfd̹S4V^Z _- 2C \%r677=O󵌄666$IJRV+@]- .k$iqqQQ xZ]]1F^### @+G \r2<[M-//+[ ILCՂҒNNNtvv5::!ƀ!#qbxDOO x:iPFAޗökMMMiwwWBA}}}/IXmmm~!3%7xĄvvv| [[[upp I nL9{>Nl6nMNNJQ]q-9N |NK7>>m| < 544$kJ`x탏>|Nm577bixl* E ~>p*"WB1pزwWv2מB.%@z}[J'7S'EliIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cursors/Adwaita.png0000664000175000017500000000221313215735076024771 0ustar fabiofabioPNG  IHDR szzbKGD pHYs  tIME  ;:IDATX՗_H[gƟ$'dIJm0aMW&E)^alLh2gMQ+X2Nh)z uz!vS(<9[h 9?&,/I[N}:l?.Vn pэ$s?-{nqŋɹ_%I:| Hĉ/4mTVV2H4MNMMCYQQAǶ6!DX4$Y__OI`0Ȯ. @ Hv3 2 $yi!EQJe3H$џKD@rz<:tHG˗I7eY-B*a4M0CCCÙsiz;P Q4MdY*d2ySBI(\+qMLNN"FBQuJ( ڵkX__G"t꭭C`.hp8|0fffC477;88 #_\u\..,,UJ.w;ƥ8{,v;=O>Mb?Ȳ|f}i}n>F  Eϓ$/]DP(L&t:  mYCK3@gg'ID"!I^zu2vdSS].^/>};w ]%R)d___ ,--zeYN ]+W&x$ɿ$].kjj۷o8?hBյ:dŸ5VU4;; !Dc[R)fYٳgd2~_ !MxGcc{M^~fR {$IR.sXX_Nzě`EFIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cursors/unknown.png0000664000175000017500000000176713215735076025133 0ustar fabiofabioPNG  IHDR szzbKGD pHYs^tIME  ;(셾IDATXŗK\W?fMeЄRpSEiR䩸SPPAD\u!Lw;.]ꢛqLHP B6i?{卙ͅ{9{督|Ms֬ҕ,}_d6Xw]WG+|-hx<܀WE <^ F@|ZkyӖeooovnnʇ_A@.FkQ͏uk6.E=C%WSҖr{xx>GGGW~7vk~~>;::Nfgg/U=!Cy/w](?P(4^r,+Vq `8Xuw}}b ƾ^SSq5S A(E$?DL>nssD"شedAAr0fysn7|٧B}+%Y1 Q S28 xA{EwY Z3%Z\\֔靡!=>>^/<7 J+ @,--522rllX/IUќ 1r~-;VqjJh.IQqآ/m[|IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cursors/DMZ-Black.png0000664000175000017500000000221313215735076025063 0ustar fabiofabioPNG  IHDR szzbKGD pHYs  tIME  ;:IDATX՗_H[gƟ$'dIJm0aMW&E)^alLh2gMQ+X2Nh)z uz!vS(<9[h 9?&,/I[N}:l?.Vn pэ$s?-{nqŋɹ_%I:| Hĉ/4mTVV2H4MNMMCYQQAǶ6!DX4$Y__OI`0Ȯ. @ Hv3 2 $yi!EQJe3H$џKD@rz<:tHG˗I7eY-B*a4M0CCCÙsiz;P Q4MdY*d2ySBI(\+qMLNN"FBQuJ( ڵkX__G"t꭭C`.hp8|0fffC477;88 #_\u\..,,UJ.w;ƥ8{,v;=O>Mb?Ȳ|f}i}n>F  Eϓ$/]DP(L&t:  mYCK3@gg'ID"!I^zu2vdSS].^/>};w ]%R)d___ ,--zeYN ]+W&x$ɿ$].kjj۷o8?hBյ:dŸ5VU4;; !Dc[R)fYٳgd2~_ !MxGcc{M^~fR {$IR.sXX_Nzě`EFIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cinnamon/0000775000175000017500000000000013215735076023015 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/cinnamon/unknown.png0000664000175000017500000023043513215735076025231 0ustar fabiofabioPNG  IHDRp{i=bKGD pHYs  tIME   tEXtCommentCreated with GIMPW IDATxis$ɝoxܑ7 Pnr&99gtjMfHfkzz2=iV36;҈Cv7y}A"ITuf- pB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!K@!^|ZY]ʲ˲Dk1T+ZcYJ)˲,j$ !#ĵ/u 0E8;{|c:RB!crs3?[.j:[,yN4_Km dhM^m"N!bOj7Y9??ܐ$ UU}'x> .óiz~?ᗚN)N!^|t}}gI^"2Kb IkDQ`0 "|qB)xgkq+I$aX0͞E񬪪gO$ !Byy>󜪪<0 (dM񵄸-ވ\ey$ !BY4MC]׻\vM!R ߛ(v5MCY_XRB!cЮ`YJ)l}2.#oBԽ9e'BuWS%M qݿA]'BqQNl;S܄D-jG$ !BxhC׽mjus7+rݠnnJ74! _=Z{}o\7 {VԮ|ߡ)IB!Gk .rsd08q:U5y)܀V <?*PQF!>B,/HqAm폸 Q5yS֊ʛa` ei:#R`Yx:)ѹ6I_ sTQk>! @׿1ݲ 99XseASUJa,0wwUUmuoGکwpc ֨ti2P5Q8#zlH^]SR|s:я6vGHʲdg!#`m覆9j)?m3@4`^0fjP9zWMXs& ^Xr?tq5h189暟18jp(m\k jMA,\>0`i&zEy2xM θ?f55Nd'QM_\Y r6*L\n\4xӣ1<{BsdMmCg(dYD1nMH]%dUuSL?x2 +첢6[}j +? バggG<=q]|5?5w\yS{G|KuO!SOZCI)SG.Ph]/3a6}Ÿ<2,\*hB( .`{2ed7X+lSꪏӛ8$C6zErɇSNOF 58q~яfasϯ85{< lqlUJvz}dl_ԍF6 :9`J;a>'LNpc'O<湢WF|p4ĭ+mЖkg%GrCzOFr5`c2#w`GCKٜ/i|wƜ []\_0>]+U&{3k:2AWWq<뢍ƪ3H= [;([a;6m[uBYv#o pZk,&g9Pi3>=ɔhMB4>dtvQ!d~s9xʓ!'Dpyгl|}w#T)im#S~p:OϷp46 p:ϫB!ķ([a~"˨*ONo'_F-F|h@+0(A>TK3L8`8rrg-!Ñɐ8?Kkp08}~Ĭ7KRd'q85*t i*TS܅w-J#N!Pw9s˲,˸}Zo;Mi dInQS%+旗lFo:= mr0X(ikl16e),ۢ,^q})G{ 6kaYUI$Tf)}fqu%)Aڀ6 m`@yxttj=x?zuy>Fg)frYRg˛0`EgyR H-[cz''#L"\,/`|PO1XX(e( zM(xUc_q'3g''÷klt-t͊L88:xb7$sxtt8" hd/7}N<9`2=&)\~hN9e\,/|S0`ueS5Zy.Ͳ,L])eq^S[j;h MCUo׬Xݠ(=잇. o61l M?r%[BfA&L/_: הxq HuӰ)+ʪ^neӚu!15=˲1Kci%G$ !B[?az4IVYl2zfuKg>oE\eC J8q4פk{aélna׷pwW'ft07`|1Da DVA4we( MYm/_mY-?/VA`7#޾7*3Nqt~7gG|" ێ]䦻J >8gbs}g?;7Vbl݇u(N8=s|8e즬WcFxz&ޱ8!B?!RoVl,Džj;jZw{X2_Ugˆnڨ(e\U!?³w. ՔYOuŋW5U0 }~p Fv4l;vkn4@a>}xC!wgY"6%1ej|I< bL|ܶm[vF漎-,eó3&1ś,f-ERPNC檭n/BMtmCoVlϕ!.,}mZ7ye~e=<|ʕV9F:{[D3w XP&cVْyRS}\dp* =ku]"lJQ!b8+@B!ķ5ĵ˷{1kp7{)r2O}lYQ,(:6 36OcL=|&vk;U.ᢌB]4*riސ,Ϩ{}?k}2y)nz;Ӵ9Yi)׋ LJ3߬YS.X*m>ij$k4;bΗ,u$ِ. C]kpx3Oo4c=/0dcuFUf'G?!)ϾS4I Yl 31Ӡ?+wu~7hXmq<3 q1N,cwSU8YR>wnLmY`dtijC9 L$,`bhpgڡ0y<}[ 4ĦiA:C>x'#0mL8w4O\j"N0xM:ݠWs~Vǟ<9 Q]LJ%|am.n`p(u pB!߂׆h6 4Ml2|rq]˱vB v@hm'рƲ &#N}6E0[abd,j;5Rk}7WI28cj2uWudm>3Nqp&PlW)߹8!B?pkbfu]k6YAb(U%eB'e_جn u&ѫ5`[tIi xZfEni61iemq\O`dn95WbD>UʬPP7)˲$Yo׼ZE zJu% !J_3GdYBYX2a5lhнʒu9)p]UfIb׿SeTOF.ݯ ub5NCTzi*Jj-_Z^s o,kY(?³Kʛ+r\]Ick8?(V+Ҭj9|`N|>',+ ]zXɆŪկ (M\jW ?ɎM]q:v׭J<-7d \8%.=<σ{vo`C*,xunm46.#?e9K±VYS.^z9)ӏ,F׆JkuFH5˗F+9tz6Jċ˗\ #GAS IDATIXuC fe 5"68'Un}'BH~s+,oSt1_--ʠ\c6,הIDϺfxـV$,O AC8n)_Z v(B `VT8 lUŔ%J.7=ސhvTvC\g|yf3XyI >CԷs?wm2aYS\V#\]hЫyY/xJc`UTɂzj_Ip UtIV6 j1IˋˀvX-^M8Ȑ K)p5*F^-]W JXEBXS|rQ"/?SCQ80 KҬ`yS|Ea霛+7>Ǯ**cQ*$%׫ Wc~U%䬫Cdr^48ņrQparvӦi eNY)MW ,^˫_1WMjQu\6q^1!M=> 5*fDAgڎ.3|M4)M o VZu1KD8B7U Z#OG\ݹX=`ח6bww[jzش >`LpeYԵC]T+ˢi<&h( WJ4~a|l.Yޭ Y`lu/KnXaq[y3}'m:٬kUEUUm=_CsM5fj#cxCdr0O[ֱF)gOɚȚfR%{O CC`X E|>sX* ,%Pa ŇR r7P`63JM72J!Bo\|҆SZ0W{xoV'4wڦiv?v<]ꔿJ9pC,YY]]1p}{m랧,]YnՖ}eY:#K=28!xu,>^7uP9 c|_t=18`~8!BSvz;N[]ޔx[3]m.ѝʷ|2V1+Coݍ߷q;r}7@uCCϑuS]ϻn>t/|C8!Bo }ՎWyc`Dw dYT*cw kK{7"]~?~ٶ~U8!BGT -o&78!B uSGx)!BQB pB!B!N!B!8!B!B!BB!B pB!B!$ !B!8!B!B!c0HEH=#{GP!qv -˺}=xgjy_wOB!H_k֚ihf׉TJ8mZ:u^jW-{!}`m4 u]X)Rj׮m~wнL_WIB!wh۶, ۶iuq];n^Ͻse񮰦wnmX7[)k6p}ٺc^i{vmHk!_GIB!X%EQPu].8M:KHֆ,wl۶mۻky}ۈI [FTZB ~_WW5yUU9UU}<{5|L۰/מg?uA7[,뭝yvtP;WU /ш0 mq|/{o4 O=s91' N%5e'|`8`|urppcbvZ=N}+^Pe js1HB!ķ85MCQdYv#>x9gggz=...vmkzGSr=O9=s0xq)XRs@Ig*k;;d:qfSnjCSہn;϶m '7ވ^cks>)Kn8cv<Խ0݆m}!:dY{ h`g98htf%:! 1y}hӧL!kOE y(f|o2ٓ 3"6 M5 Xm8 pB!ءoCYySNOOǻ#u[d1-&M uf5Mbm(3'#+^m4oa75FW%k'g Uۨ8!BoikG.0F8j;@Un-s | $b^G|,s |HN"z Um rhG>8CZޔI@(Llv98 M]kn Bq{6x#w9 |̘h|A#ħ' E $,V &g#mp@Fc>%4LZ|CU6lFG:z}0`KֵK 8O#N??^}QLFc<2T1DJCh:'/KPjFpB!9(899tJ8y{w)O^={ k, qgO9=p-i2a[΀[3Me =jmc4Y1c<0=~}se0)>CB;6\ e#LS+ElF13agcl?)rr*GkGQꡅ8|g28A8 {w4M*.HW9kv`(4^G·l6ke$ ya;>S^{>z^Pqq )rrqwz&豦4KB!xO[eYaHg0얀>P{ߵ]@Sݰ\¯튢  OGAA$dEŦ(ӒtPV$kHp49ƪ*[?"ƽ@'yI4ԥn_a+C,Gmcʸ؁m65E`T(@ِq] 4M!_2X* ڮuCkq(b4Zv mo_X&'\RY6@B!_Cel6#ގt|>S STfq{V6 ,@cꂺ>61k;ͱ=vUXޤ2ض@S"o\FtAmku!VU c[(Ro~}۲jh\\mcFB!#v(X,qf!2NOOL&rcwe Px"]<l], YL:񔦮r"iX8fj}Izs Ѥe )*oꦤ,rҴ FC`dxl5RX{D2M'7nnY0"o* `*͍eʄx-DMm۾sb˗xbahM3`p5륅UVԵ]|s\8O'B` W$k%Y, OP_\zy$CʯH n۶8!BGMve+8&s*꺦nNݾW0vzoYmJӷm˓'Ox1~)'''(˒`@Q=k;1-Zex _VT&,e 43Ťts|{ Ty⒵8ɲdgіWu; \$D"WX,ܹaiqGm{7>h}g9)Hs$"I(vd:ɲ9 LvuR[#$ɦd2a2_0N eynh^?گL2ew" ߦiz:NEQGQ"H$D&"+ _Hx_e5]lmc}u2U6n_x^{S~׾QH$D"lenEmy}y9D"H$5*:՞7횉^H$D"l2kfwUd͘E"H$|Esnө:] v;C|wC')Zڶ%֚$IvǮq}ynL]g팓iIvp[`#]ۤh [ɧk-RM(ڤ[k'rn}{VwǞ$fDvKvގaW/oDD"H$leSc"4h,fS,kQ32sq9*9L[>;> w?62(r,!M@;' KŬٴ϶lg.&vqQ'UMk #;+<(*r·/APTQo=%Y{ʙ !P2_&[|m<K9d_v4.CeSf,g,>AG:I448M%.SrD3-]R/,f Nmrn%AB5"4eSH$D"Z8d8*9HU4 [e:]/%]6|YV{1fqAq#4u}n)c h- IDAT4s~tϲK!I(maRPdp0qΘ4>وd'lZMl!MX9h2cĜs|8D I0*K !ۼv#y^{ D~6d^ IdM<"|}tQ:쬦jݹa]FݫJ8`4`ヂ(g,fjbfI^P͕c:>PW-!j5 S(]PK"D<(ZD8,=&e5m X+\.EPyWeh+Jyǃ5J3PNQfAh̽(s`ă"il?I 8wz&&qdD Q`8،f TF8\ľ03(픉 U$yƠ,h%U+<}@Zc;A+=kt}Yu/ {i<ͨǨT 2|6g̛IQJcpQ"H$D,pf!QREۚ5L!G@jl~Hg5ԋ3t^mW(П[KIBezehqdBhyIkt.6_&g̦Ǻ!-R 06)qq0L.YNNгUI)RQrIL#wU XH=@{.vά0|K B:hA%`MMXg}* yq(1_O|cR!ḤdmB!L-d>,+䳧8_vr=QHÒ9$K[|`kv.q[R]ל6J8,5cň2%K4Jw{2KH$D" P.LiF( ?x:ЍF!e #sd7c2ŀl_BkMJTqq^f4V`:,}ɨiM^L]%6дiTRK;d3dt98~{zLc9dNCMmx |yp΁rfp+B1bTOxj$ T~)CYI8H,KRQHh̛*sCL_OjȪ4cZڶe\qX`BΠnj&>%YHR`i[&*kux 22wH=b4J)'+" Fudi@dAyp!D2mzE450U7(pH$yUytJϟô h0`| )O& y_-)5y/!uAe4.Tn$aYF |`ZT8yX oӟ3WQsdAx|/p19)u^^a}]Rd5S.3?[5p+J `|jT!\F΂Ʒ>jrT[S:0-! (.uW\T(!*'IRyl3^zΚ 6d/ Iճ=` R,Z|;t.Җ{-5A$KVu͡׏txx_=4de &0pb4B!exnۿŀyƓ&-[%]}׈D"A..ܦ̾"S C<]0R+Fi Ovt_&)3 C;mYpZZ3#rѷ(Q8!!*1YNi \Cc2 +EAS%5J*zg}jn}ghAο_rjth@xi̘URg 4<Ś\2Z)5~H R<ڀ)|L*y~m9J;k|ZLxo @DoM%A$h%h{KJG,Z?% \$DJ N@K^3\[7/)A 'OWـzd>?CBahZ0Ҁm"$DL+Qjq LS_85&IOfrr2%ЃBzuuEjy[ж-puK8岢=FX,MH*[ԇ Le[JeiI܌E,qsOR?@pZ$B%VXld6oI] OSW4>UvK%J4Q jYcSl\J-UU!:'bWGILh!c_[V25#ޭl ۸u\T4a@X^0mk{\>b$l@=7(pH$*IkyM\>/x(rW&qRJdh[ (WSل2 sM*&NIY)3 fJU:W]f2;]ޯn:c 9e4bnƴ#cY'JbU6%Ψ+Gk+ŴcI܌٬")gL RQ-+LRxT0,kqu2@,gmp ӧ5(-d7-i[lH-*!W jڦ uGYZ̤(QQ/=^ f"ԈjGx"s_5]?·1'M9ik痘FRup^t/i7.,-1BabB.)[oR]ZE"H*n¶3yE[1/(rW"pRfiWUmKJB8CBm~+2!CM&msV(%7қC2P W Ƚjߕ2ٔR1-e-jIuӶe'4[W;61s6%ɺ.R{C&Uqg~m$I0kɲ6Ι/5uos!h֒)U pCR5 p.!猶}V<̵!^GX׏P^ᲂ QT*EBsb{C4cF)YoJY:]L7kH$|m]{;wp޶|Eͳt*Z#TJ,Yg,Ouv>7K)7-.ݯRmI<WUcOc~4`]~~~*b%\w$I~;lX[9j}F*ݱvK_LxL@uxIGw[{ 8w~GH$|m魟u%7%laK..(qubˮU=??:sKH_e`XE1mՏYFוۮܳ]k{oUyYކ$mK0{D"7E.MoL]~c_yvݒ?IE^3Y'me:ߗmE%c(߆\|풹n۲}6s[uOD"7IٶeY{({ZohB-<BB< !Є9{Z򧧧Ǐ?7~n{NdO4ϥ_ȝe;`^v嶘E߹6_e_j̛ێU_?ӽ:.D"lZ?,/e7[RJu7T-R9y!~u]|>>m۪'kf]3Ndȫ|X_vpx}cD"W-oz[ʲᇿW.])eR G/gkY3c.CwQ6.J\$DE"H䍔]6|;IuPJ {ѣG h֛Y?&[ \'o2J\$DE"H"oݖoRw^EYo}wz'?4Msj-qt//%.D"Q"H$[_ܒ[?R~BFk/~ѣGje9ޣD"(pH$ydn[ҏ>诏^76oGg` dR< ڮ&J\$DE"HMѷ8I/ P>#`Jtʖ -J\R\m{5b,1$oq (pH$oo<!o?`1։D^H4uM۶_[ѼN'7cʾ,.%MS<'˲FE"ח[]U8;?z'vH\X [7r[b.Nf]sBk\o]J=ZhId"w !ж-{ic4¹XغXsdYD"m_r|-yۖ6-rYڶ*( $!޶u vQUJ)40sp]p='ݐKXB(eBRxQJED"k#nW!xͧO~ZUչ>ZmEc5EQ0dUtEyMz|.{/Xb,],!ܿk.k&D"ϯvk9X,Nd\żmڮ0RJi$IeY6F{eYZ'ر.?OOn ~nI$f"W4%I.wvŗUPJmpn|&J)R81ˋb2RW&p}w3 \$DJv}C4˓G'''NC$uýBUUǟcP>|h4zxxGGG>99x[oղvmω2o0wvfocfi^˚p8rl"I˘^UtorEnRMu..D"}18}_~ggggg}I۱9;۞ŗ_~p8g8޿A~WNNN>['qfKvhE!o9cp=g (6p^֗J!ĹL]AG?.K+Iqm宲E}b$.S:I?r]+ED".p~wkvg} .%Cwn"??{sdPJ׋'΅Eb J)mK۶!60CIw-J}i>ũ!Zc=W0Msx:a;vk/k.+qD+<}nJ\E"Hu}9~g?z_n __κlzn{ؽpFW'|GwݿvM~L&/ײZ⚞ԩ-U9i}φ̡hO1 tgWP%vq\c{snsx٤$2Y@sL`V ϲqSnIYA&i s\SQW5sQWYqQ&Kꊦch5~pБ`̈́RczһXd" "SS-X4 އz1`zG ʌA4b.o2Q"H$PଵG~~dhy'sSvz[~NNNO~G) \ \%rzKD"n$.hH9z4(F,Tְ8%5 d>m9Y>`,Q ܰ楅Q.f1e)ӄQYP -JB3G霙6-j%|݋,cXH9@3c4J#%h&f3Gۛ3yUfdɇ%2 K=z\^5ֵI۶ ! eF 8cgC(_ռ(pH$~GKגzbeZ:a\mەokˀ}|spI b z[7/qe$iQRTd4V83g50w,i6$e-id:yQ\7Pc<(*<l>OWk8okefQ\neR9XC``̥H$¶k!ksO`7yғNL[y3\>zO?_?:= -ے'q燖FX,X1nu?;sY4K'x b#o*'|1R}Aަ@^F]R5+#opwMWjI2C's/p=rJM;Z/ tr<9VKd F-ٌ3sqsnVڒH V Hsh? ^dGH$I&w|/4M?O p`Cku[@H{-8ѓpO>iGY{O`K޾V 2^*t~ŢbQZl&b 9jCHUq?,N2pRJTR"ʄ,Q rAZ3"=ټ[r2m˰KٖnMd"键j5Gn0 K<9iHݜZPD&fɉ-h}.o2ߏxYxj"CjUEPIԛx.sW.!w4n+傅Z$ɥd:tǘu i SGJHXOk,KzIXWuYlUwU.4'4Q풦Z0ޖD"W%sGN4ztٰuL<ܕy%Xm/&9W]렽['Mmҗ>C'#7i 4 M0 kS"Gkz/.s|3c9,P[t!t80#TS8א{,8yԄ EWrrYaIHK)֒,E%&( @ͳ5BH%IuNl[u-iDW@ez{D"Hm[g'5]v[_,I]7\kBZ^iȭ}gC?G:W5EotOED"EY8Q(mm#qtKo"_#j|]5:%p߯e0._]VlJ%ҏɋ;yCe_7E"H"/i{.7BJ9NNNNlf7óe _eβ]`JPmT2cyQ,5^1qQ"H$r!{YUWDU8)~?Z_kO~֓2{lEa\,(￲_v!iܿ?cyi,!֯>bD"7YnKe4-~Lo^wG_|/'ifKͅ8uW=/` \;yYF#c^Ugy%=E"Hȥm0Hޚ>?Yfؗ`Dvu?2~:͇ڞ u"_ w5myu[G,yQ,7Ylmv:eE"H䵖WFk{~ӟ9l[։(m[X_9J;6(J+\W6qc6~q.}S$CO_ v>c蟗]1^kci]merUYذ]e?#?Go⚉Q"H$|{I)߽>??;;;Y֭.lɛp04Fn3~%@F$*f9@W $'IB$;I6Ҷ-ιMtmin*~KR禋j5ZkJV J'!Ƙ6pNf.J)bNN9}b>G/k8.D"Q.!oko/|x=O:yrp>OF$LH*[bꊶY2sŹ!˺90ɘHP.i9Fb\}=X}@^d_Ihp.=VYJ9T= L=ƣaHUm:KRe#| j=`41RT f,cy]G5sق6R  s \SQW5s`6tA RhEI(9E*CmkŜ^(pH$[~(UU5??]Vq>Ws>-7:!VE OH.YPOLzY ] %\!̂T/܊+͇~rTr<, J|DLNLL2rXe2A^ 7,!qLj4p$B[ٔ X|x,gLO[B)H)ʤ44Tsқi%JyӄaɠHb@h(uB83s٥eD&HӒu)IpP,@p= D"ER WݱGۜ[s٦L̘$6k%'cNxkqAn<^6uXiiZ\(0P -.*x'Ϙփ]b}L>`P(D ]uyP#H$ye{||77l6ٲ>d̾EDڶe^Kho1-&*zM_B³6uަ|9XԎK*SMA HenM0y`CNVT >m2vVCkT ӥ1vuYC;x<TΟ+qj;Y섳 9 \`om˲zK`fsٲe^M1Z@E"HuB nةp?Otzʳ:m[7t۶EiN̒$#%>Z8J0/# 28[кnWm&WwGվ1VHiSfv]2-_xmRD)83R F$ oi,4֤$]W*A')'Q TTCnXeE*Q_{w{ JjUbI`/DhI@k/S`}ݒ i2ian:TvokED"WI䶼};/Ho(o͏~?Ӟ{ U\pI$7yR"u%|KhZj; g\ !< -'ۇcI$>IB!d@SӶ-h+0=Â,jsG%Nf7TdHfN&ωmb9,s rጅh2aI+pC b1cv.ep,(U{H9~x$Th2rL~(hƃb.I 58z" 4zȽ"jHmi]k0" \$D4a{}{/u tVs~ۜٷuY~B"%Zk<E1Jy'ZK/8|qRJ)Ő\IdS$` MFLdYʰikՌj>ajҗVX63M:D_HaF eij6Zmǥ"ӊ"q뱑!X"Pm1VdZGF2Jm@zAF$ZPv?9sD9R9rA>dT&hmi Vm71 .D"w)o}7r9'mv gfmړŖ9b-rt@3&k!E)yNRvȓ$Y x,b(kd,L$i痍\!֠)md0"K,,995,Cg4)sVC4u0 bA/mMU5,BRjDD"ț(ol \k?{o˒}n>{L>CfʪTu;A!z=KVVPy7|I4#8Fp8~ d0ܜ\ZwB9t:=?Z/tEL\7 \} zfFFBւ)DT,ˀHNWh!huHi߇C,ϩ1 %a6-f$^|\H){=%{Y^5,`LCNiWOb!7ƥu$YRYv߸q[sN9_^?KzCq_ЭN}W9?Xkݾ5˰2pj1vU t0@6^7[{tsBX)*2o9c̹"̀<1Clf\17.c]I$ō;'|EJyc\1?z/y7_sޞ:\amn{=|/3{ o.Vstҁ[:%n ÇxTM׿`o.QF_Ʋ{(/nlܶ~|cgg5.9n޼Wx th[C??i9??okҽ&7W}rh.x zt`^[( cg 4ɾ)cg}2. _Ry>vl m7 YUUsN?7t[6o  z@-oi,ޚ}xj t_~aYLsϛo{ʼ--? z}N&P[ i<_|__[[8WPr~א ~]Q Wd{,ܺbn^]_9%gߚ֏`0{ʁ>}|>gtRqݷ@ͯ:bJL_˃,%L{V~ @e1*hsWv\w"~Aɞk6xoAvU3py]^^bO{B/^jphw~&2MSNOO_}\$I٫f`eW?>`bu]し˾KJXI}-дټ5χ4,>tp}eC:_͟}1},f߽ OQ2I{ʁf̾\mcn=n!tP{lv¯`cjʼ .~xnx /~h۵/k8Gۻ<5̇}mb6f>[ '9@Eѯri+VeB%7Mx z%Z)d  ce4lBKy,96I$Ƀ< \)%RJR'擛+IeY鍹\pz|ſ·<ޚu)~ʁevpiyux :=|pBb|0q @ >}{H0>,!n.m^|xqiJvn,$98^\uYkQJ=zlv]#c RJGJy}]!\Ü>¦Rj {Z,ۚ|lfi|qݸ9^e79oԍJd=,q.((((=C{DQr[I6n2oAo1"sE _Hcxrć$A3^|V%YQ嚸ͦ|t aɠh1Ev .ƘUŐS?MsG F dudk=Aa9lΧ] R,͹2g{q阪,G3}'7\ (+tg\t!!P:: IDATK;s#L%AƐ9oꆹN,y bY@(5rF;Y\5N!Q$idG4,žpAAAAA?K(ʟjٔu=6[x z2#QYV1mL.P-mo0|UL89mKwuż*p{5qQCG(Oဓ!\wt ?fv/ >SD36m"IV%U!lIf|8hTQlD3T-~X-G8e{4L>oAoK"1Q,ȋSɄɑ%i!Z eo.Q{ʋ$$,EDȲ`PĢZzNGk(*KM/Q'8=ɋYxȠغgt ٴ83/q/@,Dž&"VE B`I9a__M)J)饢7`iAw儏>Lr(XI?-l?S_ds QQPĈqƠ*IiLΠ(0vL8KY$yVUG(m}L5Fl &iFQ .Գ#\PPPP{[nYo8 p\6-MeX\p& D"',!5R^*zs2p~6J)Y\p%'S(կ jъ3+E7 uM=?ǜS(kECFehPR-՘h٧eIz%hX zŽFιj#kH 8'Oo$"IhQj/ƢuGs,E%EPeI7+w}1/X,f|d$FTKJZWOma, :$=9vYm.;Ͳ}$:YkQ L 58b4P'yL,r24%eU3[A Ѩg~Ih1iSshAKe+`*0Y$DS~< ˓Đ% Yh:$<:Gm(( LעQ (T^Wܖ{5Z5ˇ'yBb$ "!> *G90L$/LV@o[gp tHp{ xv8hfmABCEdY$Y BmN 2&dqz  ;/Y*Ȓ6$C-_!Lr  ~JUY-JIKoL_# D`2{~qI$E8;\INTō^yO?K"sᘣqxX&`odXьZGdTV#!ESz=kKHQ0? SKUV Q #{t <]p"1rRy"2 c7g""=Ck>̹T8aEpV\Ւd`CN"}qpTU _X! a֑FVuf}Y3U01hyw&eA9("ѪF5}yI.p4(˒2\2!ږVdu?̾zdHZUFV&(d#DDFO:ـ¦{9_ؠ3>|eQڢ(Ķ$kt7"Lzӓ1M?kǺ&V1㷃"2t͌[.+L Z0μYB\ % Ujhm16'Q$W?9Gd#4%!x]ApILi"cёD%(Fbdз-bFʨ쳑;^'K/bP Y41'2QX%i zƔ^.oUKNTȉ3Hb徴+X/MAn- DR'ryeELU=͌Yӱ%i*Z |1DpĐyJ;vqɕnd&qdB%"QRuDΩ1&J+X#f1+ \PPPPPNsc99Hd٥[pqhe4zY0M0tYFf-FĤ=Q ^?ʔ/igE,Ost;eEe;zN ID lPj Q7kC`tYphkaU_aLK\-bQHk{Ȯzi fy JE#mѯA8YþpAAAAA&=eAN.puAF.5?t0ٳs{#Ky{C`y}w%,Ý-t?$/>_%peSAtm[9wQxgr {d͒8qc>WCl>v{9oo]A` j+?2l[C{4:n {>fu;2g{-|豟r/ 9B{V~OǫQ{G\:1(ՠPSշޒ Ͳֳ|_Ø%I^V5j}],e^{\W5.((((-sKe=tqxV-7Un^-/)}5}l._w'ܾ@`댜[g~S) : jVwbj5L\z4qz3pwЛg߷\Hkr}«}.."$2!ᐢ(n۶·?2yv]1hv'}+8k-[2`_*iڃ7s Zw_%<8~]W0+ \5b>aylxȶnp^ |k /x ٴ~g.r]U܄mAͲo9l }޻_(@YkxjF?7\rmf˲l-\9z8\PPPPKga\n-fNyy nW zuYk˭^5%4g!DŋFp8?+g+p0 pn[k-Ipvv8wMZ.\PPPP! eK%椹޹e}B#7o~p+C:8ᾌ/˶F~)q=([F!KL iv.((((Ve\~@q;`-d=&;W+M>&|mKCU۵\pKy<ܞ=?:m}̸<&u}ڇO~!/:m.t q~cot.8๏96ۼp~Czd^Ժ۶#΃v~|ɇc`ht&~/S$\PPPPMrw=,\RL\2~AAff6%cRGERun?= !Ȳl_Rm^ܸf{Gko/nopi~yʅoĿqq?; qۮ5}#.e /c]15F.((((Bxߘ{{ o]Ξ bY$5jF_YjSb2JHMj[R+\?Z]zɳ"3drN_k拈yrB6(mPmMvղҐ^irDZӵtMü0^$S̒)|jƢ'|;4ҤWM\>2qk"hg<*?*j[uά3d]{fR_NAЗ' &(LZNӚ c̳wzNiE1,4Mf\ _:TU,cʕƹ;3QB$ Deb8#s:Zꅢ7u/h3FUIYQ.JghSDU12R1vs9|Lϋ tF*-)UYP#nN,/D)u/Ju#,~ͷN ^M5 <Ƌ1CBE.(򊴒Ti`8! FBxI 1d!X;x̾])戼!)UURUih\5M( &-% ˶ O\uK=AAo\)D=X)-pೊA">"Y ȕ1MV%Qd0$;+>MZv KtRjgm}*!ËhR*ƣr\"%1iY2#O:C)^θ/E-e<ҏb(hѱ@4B$e^ΗCͰH(&1Y%0B@VSc5bFBv9&^qqA,SsŔv1G2}Gj2`_QF(%+ae:ctpAAAAA/ rlS4f8ò"\AkqfsAo@0G=0-)# >)"GJ G+/STQZQ)R]|ےi-Gـr`EDl$w^ #,R -L<0V?57y/t2?0L+*%) ⓯8RFyLRY(٣t4=ԋ1-g趧YIF"MaA0^Bk F˵Z3S2CQiAʂ/o]]1Q1s S{E2$Z@3g {gHkxe8hp", zgZkt4 (#Rԟ/F9Df *[Ȇih͐,JT_Y|glaYV`ښ~M/ȋc*J1aGUi6}4^B_Ӷ-*>[)T)U.Feف;9^Z]eZEK|Fm"l>fT%$ňBY9{mF4MCdH4*lY" ;R3{?;H//jLJ1! )-bqLFu(b25tor\ނȹ(M>dP(gk+}.hc[t8!#_ƒ~ӟoc$5g{[ѐM/#O'򗮢.uײh%Jhl#rJ܀ 1$>7'%X"g_ls!UeaQU3kA䦗doOݸo1qa2h$!McnUjyIWg%C>qޟ19.9.6 Ɛ &sq3ovGX#_h/|76i9Bل${m;.((((A6{ND7[xul\ixsNƜdjbtfFT92B9qeQERV|< W\ή\|7#~sZ2:MbyŜyFW iq|8J?(wy7.?gTz0$@\ sUѐ}@}^.)9F7]\5$WJoSVO$=>]z9HK.g|U¸_NII i`:Ezd‡2BDQ?cC<\PPPP{89c̿1';YtH8w(01)cS z4l4TՀ<[ϙu G8e\LcƤ mU𱮙%^{mq<AWL8%UGFiIe7*syQ3?3VM2 .唄8d0{HӪ&??wSNG fS.aIEYRhUk>u KGisf')`tGԴ4QJ۽^pAAAAA6)WL&[1(}(B A@r_V`1ٰe`sLaQ -S TXӣz 1:IB #Rm^0u(C nj !ZŌK 5.ZZ/W9SZYF͙u)q[LIH1G8mi3>[?:QtË%ƔGŜ/"d2L4VIł~xG6 :Ew4.Fi \PPPPPo|`so.>nU0m~1n zF Z7\\XdlHtTp:߮]01(d=niRQ=kǾ-SX-]k۵4n}5*hlGnt,Ԧ I/h%1FlBR!^ċh JD#%5hꆅɈd,fM/Zu-`.STm\q|縸sݗ]u5ZG}D7ecC8]fH$y.((((z,[n 7[)IJB1a"J-EzU(odApngfJ. P(Z/փ$^-+/jZE B̐e\J> X] QeJc  el&x IDAT$Y{u%},?Kk>b}/ 5$MM)y' -d݂~r, >2pkx·҃%_?MuV6),˶ZkxI/>ȸH縸?.I//Xߛ{!s }5M=*\PPPPPPPK[b$٤][=D~`>]bp7l+g|?/ſ>O?^vG{ 5 o_ ҰfW6 q[CBJ}ظeir!^6P./~Ca\vc<彻mzpAAAAA/ rO N{<(*2| 7xezy=[+6[vXxS>ȅl\ЛXqeKo[2pAAAAAp $o8~ -)s^C֫6 \15sk}sE͉׺v s7~0&yz@ڤ{]=)/` I)Ճtz#?vAf@>nhy-/[^^/{y-ܼ4(pAAAAA?;x eX.o\gZ Ǜ^AXz 5p Z6R /AA&1x,Iq޷/`p~V5s(ҶNP٧mB_m݋e=M?w3uˆ~0=[XuνA\%IЛfLUb%^c^\龥zl UŇ}ZO/kˡĖύbb3o̠@{}O]ٽ.@]ЋZ^nuvv8Q%g!ěҶ-Zk&ɍ|]}[ҼM&^ c)%wjZ erthkҚm. F\Cwr]IO ΟrԌfv)s-zq)Ig]^}7m lw(8-t7,bBdJYo>4 }mm92͊w?S}' O-e:_6/s%oN?3~ O=m6ξ[erv;3ƬظgIF =_e~&+?Ϡڋل^ ύɁsyO&7>'Kr&IbP\ %k3&v@v́f唽ڶ6l8(E챁81 \WK4MR&˲u z7:/}#ZK$dYFx>mӋ <_Rj=VkYfcd]R/>/nkvFyݼu?O4M= :Աr~V.ẰKoz޷w y%gd'!3ڹd%?qF2(%%}[Sw)Ώ" S̐WL=_ h0}KW7uB%wJ'آĒSZS_N^~ FL%!E\G(>Af2%Bjq8~P;}!Rƃ"TyI `dG#L;'p1\Į'37URDED^89$]J-_Jf6Z/<Km28U D1͜8 (ǟ;V[$bT ʜ,5SqD'Ʒޤmy '|#\\IU)\PPPP{8lq,G:}oA\+D=JdS*q>b*HZ+n鳃31M6aP+ <#=uF ˘dqΗf8'IuݶԚ].V&8sd5ID2IK.j}f{|J"(yIGVTtcޡ;z`Z6 d080*>"ϺX/-=d4}ד,B$$ŀ? &1:9=p|[X- ^p tf䉍b@m+ZvtZ3%i`"kÅ̪ˀޗ[CۖZiE5HCX9 =0 u]~j1JIǘ"&bҢ$jda7[;5$IEs/n_g')L NlaF GU }{}Zkži!UbDsV4Jǔ*!` F|Z猋sgNRFYDj2h:z vb 8@.p 0.F޷4MC ӌc}n{dRfmcu{6K?(mitIrZpj%]- eSeFGDrܾ](`EOK*!@JɠWq*oxm ;E=$!25rA~뚹:!YmX(y_(MOdbQw+쭶w>Lr>V"X6jup.((((B&/@H @n,*G90L$糔h0&. b~4%äXAGDmtXρ1Đd>-%~/9dD4)I)ijhx~sm<79Gl<@$`#rr ޸ih _njTai.~>Ŧ uDQ%Ֆy2 Nʎ(Ir*NQA9,8)q2rYghPPPP ߿M='(M: WG|}RP!Qz@ *aHi-%ej*TG_ۯ|{V1_9_ -(0JadO'5#*;%i\)Dby<鋿>(,CD:nye +'Qţ?gD_CX(dp5L젍7፸x /mFtZ2H}ܸ"C/W(b#DFiXBt'7(*"Lzӓ1M?k9'Z3dB2dX؀~s0 G8Լa,FgL2ȒȮu5}B 1HAnɊ*#J򷃔*}Mק`r+MSGN9堤L,#N[b΅-^d!NÐC0Ĥ1`7zeRDQD3Y¨deCuXј|}MQo."3~b\H)",n=% ,k#L:Lڠ ,ZJzA'>'uГ A*,bGmRTEF;vqɕ !HDBU U.tՌNIQE,U6+6Vaߐ IY(D"&q/Jؒ4%J5IHKA ʜɨdXDd黖zvIץ&8fW=US?޳Mk-)UC*V!jEEgYxȻ˂8\}]ZiY4] `%5M3#RsdP/$m$ɺsmv 12NJڢb R2I"-j6'N;<8unO;QOft's?6g%U"UDhY/B&ſ^q#tO'D4ϸbDX/qeu);4 d^ q^HRzi 7ʡkeQgrR t_0R7*e*'1(Bkdizo`ܵFHhmCXkQJu^$vJ.[sX>.(((((((hAC+`Ǯsn2WRܕA;TFA /+<4 cY0}G|,}|Py"y]^`;?w %^61 d0m+~>}|]T8؇mR^|?S<~ 3{[ X5>>@uXOCT|켕q7U Fa5؟urR^{lҜ ^ edk 9\Axm/5kK\##x-W@-= 'u]}LY$Xkf7Ľ|j`oiRmxqW5EQ JJIu,;鮦. \ueˏ/sڋ ʵַ\PPPPPPP;[6v5~ ?>lKzqKR7;9K5_6Kͥ>>=˦мO/ۀ.((((((((,I)QJaI3y/N>W|I}j7.Oy$Y?OI7_^8~5znLַrs羬s*:͍C-2MJ^n$:ptU`Bp {tm~PK2.J5HPH)e٣<&|D"˲'s]8מܼqpv]GXkIA/I'WHȝϽWkM!t RR*N&e1`ikvμIP/L.ta@S)Y4&*`ueSKft^:^%k:󦵥IN r0&9G霨^S.U|KHe6"/JEO͐s~*x4hhbTe~r𦔢#F!g6t5U<:H@{q=:?򛓜q 0FɞH:&2YJgߴ"bP挫Ԉ'ItFRJj}DudT7ӔDJ2YݗX.(((((((ˇ8)$Sd{A(q2;}ӘKΎ*LâOgȺFׁ!M~A )%]#Xyar+SV%UMiEj?ZKs ˜~RqJ),ǽW:;'5`{Vl&cBKShM^눮!VXRL]X1#(sxzCEiT MQ[ūRX[*ܫJS՗s;EU]FUEER k}  |fA%wdiSX>v!6O2*_4RTnDR}, ϋ &c.\x}}|?"E`!6SqME9~TV̖ܡ+tO[6UqAרlAS% y IDAT֐9[ %jĊq=--*E JSW\rv^R^9}Q/rup  1p:]puc;6}-,@)9椉q3_ҖKq{[2RXB؋;'r֖YX&^|r^S`k.uPbK{!&TIrf1//r*?gME8imKS%uc6Z/Qe}^¶CAocN  +q 5xhý(7km3e^/Z8eYhQmfZd^eKeY^^b3ohĥlضyM[.˯ԇStZ"AAgTW,/˖',2ޛڋ6`\m7)ziFfoM[^v=)mu۴Ťon tM KlC"AAcBeӖ_:8U_z./ۖv{i)UJ_B3_e˦=f&NA5ur*^^t fuU$NAAZ܊-"AAUT+y~#ySzpTUU*lۦ,++^-br=e,"NA;HY$I\v 9Fms^7Nb"l9nQ$IB"AAx8{f(up<7?}9uEl])Ð0 )Wl{;7}ϲ,iMe:msnsv6-n}̶PmPD  |CXyEqE)PJ.J'L[,mMvm!Ҷy% 8#ʲq,ˢ*h(euF)} ,,MsH.ƶ(qm[\׽"ku]\Ŷ6f9nKNmFp  /# F&*)Y5bN)v-lکFpl 7y[lFڂ-۩m1Te#V]헸s|jnl<u)˲))m۬v2qFXmRn[nfdmʜeySUUc8My,{"uSύ8Z7|b= /v,ܳ<,æ2l Ͷn_Ӷk'NAAoeYqVJf+Η9D6#GZkjO}okt&c~_׎8DLt7 `j` q /dYjwoQ ,,)yfAB u{.ȦFHV5ztJ:vF,<+VEGy>8 lƝ?.%ҟQU {V t˄ժjpmBqN?3<A  bTZkހ;!ۣq"+k ]cKɘp8!&жmB il8)OEq }hCZk\Ų+Q71iL%4"|-|';z겉:tV7f(Ղe69Fך4EF~:߹pF/Z7Q3˲Ȳڎ7.˒Bwqݘ>}7C>]MVe5C.ΐ:s8OAJ'?ifmO{X5ASEQPeh!DM "AAg=ʲ,Kc{ytl؉Μ?[;- 3OOѐ7rFYbX!89K9rmԖCltD݀Zg#Ə&<?j:a7PM~wq]8Vt’~:X_FIKe/(ʂ>@ˊl=e6yzyBV>Te[ NFfD9YϨz;g2y{E՘xb^FT{;]|t9'($st6f^c=8dN^J ̎eW.SIKt#9@HUTyʣxm 'pE>H ]޹k1ltEU?{wbBΘ E|%Sp"AA)jM2=}~𣐟 nT~bE(c~8˶\ @EL׍9Vq ?&x04pcu]FVkH(L?߲9'RVW %wzw*-:}TOʛMBhʹe w8qLuȳ%փί>Dkf?zT8 hN2!Qnʁ0WCǶ>f{n{}# ^=I*BZQH7rPzJ29%l|e?A(Ԑw%cyk7B6ʺH_ 쀕a>:Y6U3,g0n7gw(.u[Ǜw TAZxvu"N<⭃{.!uYL4b]49A  \̼kjIo8=KR99挢!~$qVsL,ր;wȋ5eE&z^*c89qs!QcZMyXTH,%*]vH9w؝nFTS0$+:!ҍ ^\L/WHcLHӔzyYN׌V0&IgkPT'$D:J13jFlXvpHW32m() NEg$, );tVSs>N̛w;!~@=?D[ryFɌ"'Sb^ ,O{^hJVؼkGqgHS'naz=AN~&Is,/|GA  5k^}gS$[JtLs).^ 6+ |MwWoަ,HUSZD3>/%q,9JE]vz JWP3ԃ_ӿE%Q[.w_'8uop5ʮ@k o[/ú\pí/V- ꋨ]dck7*>7Nt9GØZaG!3iɒ> R~=A\<"tC߳o {[!權5}lCpȦ$ j>SgdقoZez_FhXSzu.w쀞_Sp?~.(222,)I-4YEQ+X "AA 2Bߣݣ܍8aSuJk*nZEF>am x롳ɒq,"J֋eb&w:tzXeBfTqI>M,Ӕ3Œb}zcY)>u1N*/m ۾\u%ڶEp#:Fe]khPɔ^gOӔZ+"J嚢̰:#?* y,r]BG2&',PdiBEIE\Y 2 yC!jۢKzj M7~rbn[OV9 - Q G 3N2YQi7iD  \SDz0Y=V]y`TɄUnpow@Tu`{J)*˦m0f)|DVtݐNX:Y+yB_3:qo[=a6PfE{ۢrRQV5ѹshG/W4{9µ\%/VZۺܻr(.F.ry}֔؀eTeJRhK>qe*$eu뺤րA=#([y}ctTdyAxYA^-Rb`XiAuXmaۊ Yy˶*ҍHl^k j1eUQ{C;t&vyGﳽ!psq'x8AAoB{3hۂ҉;!Q~Wώ8{w%ve)ZS*VCAC_O4sȕ %y3S(] W(ecʨeVfC !;c\}F?WN/$sָxMY͆kSVAyv]p.gYT~jߏ] 8c;ır,tuNV!AdS(&.ʟUUUC{=.a6#7!_.p㑻 7Zdg1uf5Pt{C5~8aYY#s-Q~L`D^l 䐮O !g ޤzDnM*|4+¶<)AAxu݋9`%iI`񈽠&P'sN?5?3adӄdLwab#:XY pp}߹\XZLPEEQ8k& m3g^,s'"欗)EQ8Sqӵ-$c$46{YvɒŬD YbE.YrttɼZRN,K$N*J]قr`];`{z.tpws|N=t<US%|cV>○2˸wEuRt],H3Nf>a[AJ< 8AVȲ+zJΝŒ.Y-Ŗu/⍵E C8Ș/Y i!'NAAxh1bu sp \Q%真sX1^ %I>ee8W mSl{+t6%^񛳐qnq8X(kJ]н1arP) ]k: XSKǮ[KzH3˲s!ۥ\8a$IAYضR 1[%bYQW9nibYP9ER/&[ )tOCAQc/W9S>N2Ò-/5QA@pyMtXzC'QDN_ͱW~bJ)$K<_<.:ӌUMisv :?,.6=rIUUSf5uB5>aF ,vpMWqzr<|i5)F'  <fF󨪊xzzR^TVU`(|J!gGs8<5˷9OX%+ MYWFs9y3E#zM,>K !s\#eY*ke1g><آ:؞Gh/+tOtsXo8/2Vƹj; |0̈7>J&UiěYx_KӴo݈~otatkkaC9<<AAh?_DQJv:dB$hm["p-9ofY#<' CF&l&_㸙;{]*妀sb8F_q0 ?|"AA^8RA ÿݽ^C5 +Q ·MmQEt:bAQOlr3-s4eZZn6u9R0 Q=aCl=KE  >ZAptdYv/Ф9=Ax5B2 wdr,Kˏmo IDAT%=+niȮV+t:>uUUm 8#ڂѶm\]\.X ~,7p  |y>O|P$¢(Jě |q0){u]GGG, GH\;$ rD޽˽{Q²)Ff"p0>}M  [1RaضZuCy#u]ln7m^S5~wrΝw: yͷ^fD  7>zDk mq>|t:mD֚ pu3m^c6ᐻwrppp4>aG1~e'  wKq5qE ?PJZd2ieY+g PJ1>{{{GCnYև_g8AAAg?ѯ~D|8Ρmیc5Y5852x7?Asԇ?O^eyD  ?ѯ[}`eY$I0 7h8~yϕR'?9ze'  w'Go?4};eY'''k(b{{z;w }Ru(8AAAG}чe1>mfXvy7sh4󼟻J缉AA{{wh6[[[{hVyя~t:/;T  aQdY_VUUڶ}u}ݣnp   |/O˲,>,H)RGt   |y7nX̎&Ƀ?鳣^m(mu}m,˺oADkMYWڒDQDTUEUUu|`YKʵ7myI4{+ˍt8NUUM[4?Kk>W~ZgnW?3?/_-"o6˰S)Tگ]}0< 'ޯqe5ӫvڞu~] 2 C8j;98].os`eTeL&)I.a.UU9Z+׾=,jmȗ?nC/*(4M\*F֣6gks4L)EAYWng}QWŦ0q_;uZZQMvfNI nUn=;@ṠK49[w9xd*N=eeYDQDף~k(ss{m:/Av>8f0.juQtPJm4U˾n+W}wln4eXPq!A46Zuyy7qv)J)<'I0ygʀ׵D&Jl?KUuyߥԶm C`\X,n^oYutg`zfƦVnpl oYY6}-޴ẁ|xS۽S^V`d-"c:u]ZXVu}%5Oӎ:\WJyNQt:''*$ǜPU3Pml5` 9Eqse;TmB6@M9lh^%ж^môv{U ͲQi8 q???oNimhWM9V2^6C&MS$鰻;Cm֚lFUU,K4% &iMyNYt5;#k"珖Gro=jGg,Ss˪q'hu~!vvvw3X.ϔtqLLS<' C8<|ϲp\%˲fpܓPj?=}iDLaUߛ"tZ öOU)sԙ{=(3DEQtc]Z&ϤΙ8Ӥu+ݾ`vgc a=MU΄, ?~bZ7;zl6(F}b8]~j]0ɗ'GU JQaYZU<<]?k ⠠ J)f9'''T]߿OM̈ݻwyo֚S8& C#nfiþ?Ղ"$znmaxe4t abME펧( $aXisoà׮cW;2U63mܿ_O37҈̈^;yk}0}CJ.xGExweMs,XV$I<7rM" "9Ƥ/WF#vvvizu"k4&ENTmffֆ,6J4zv3{63|Kb\+/i{//xZ3< "FQaYՊdjj6>ϳ,#2<ϣﳿh4q[֜cqnp{{{R5|N]ͱ=9`vz8L+2nSnu3O-UjW+LoԵ3DS͠ڶ2f(|̩,(:67I]׬mvn梙$^' moPܼIj+^q6yf5O(ߢ,eSMg:v[EZgNvN>%\>Vb=JW.nk_(\.9;;ѣGT^۶]NCc86Ԉp!*Ldx<\.4pf”ۤIt: FpðQsC;;a?[M{nOo/ѲeOi8hȠiscr3zW5ry=&{ 1a4ޮC̈uih$IX.y .n#Lzy;%=Ƃ4a] Fo{՜MGX_65Ǜz=988hY5>֚$I  m7E|3w]?h>;VAx)S+z}uSD`i7>k= gX <ȆMЮO[UQns]޽KXrÇ<||Dۃ])`08YV,fӲ6i;i3%jsp}{M6mʹ31 qbjb2Z&0b(qp8dww(:>L^)֚4Msxa6SL2l ޴7bQ[;{шn{ yQcqS&qP7ʌHQi66p$WFv{F;[Ď ؚ>X)ϦCwlolwoR-1vɲZGn" q325s(m&$Ό9 ,rjljcqm|κT.AK׊ȧLvDV]` vp=u7F=n)X%.Oqk1N.~}JIjF֫]xI= CܹE۱}tbG5UJ]]*9E\{<"r2>="mU$mj>o Ϸm$L׶Rx)J&~X0"1lmm5k7;60_X9z5|VF̵f U{ѭ1]2Ci u}VmM6RoF<'MSBs/;e'o-]7z2yܹsBgYlʵ~TJ>ՊcVѨڑ$ gggDQ~#BiҐk_$I8 vww t:lfXprrl6kDܙk53 mpv8My7>Lɻw"z[NXLYNJ,kEC 91?cRd]IwG.zN6=&[m6wC_)u:a9>g:h٥+˲ٹul4SrF4׍'SsB7#&V&h6M7MSӧ#T ^e~{|h<ͼtL#3s( No9ee+ò\`q2umeG-Gx֜b$_Ե5uYS.踋o vɂsD~GjcnVP\>;WhD5ي`YgJy:s$)2ڪ{ScݒjU%y~mI x1~i3(rA_>q9'O.0; ;DMfܢ4V9Y3׌(TUIYU袸И$3Nn&YW+VټQHǶKEKT@ IDv^QNnZI\۲,9??oR5s24s;%]Ԏ;t:gEAWDWۙm]7|8mssqP{^qz6Az:' kY5ɤyٯ$[v;L5ݺlIФLM D6 $[OC0`@@I&$f;թ3yvT<5ݷY  ;^k}M?MD(˲@xfC. u'.+(E$yCn&MyJDB-&by5)эꊘuKQm &ݡv$mdz3EM/ƒ}zۢzoʹp c(\cay{_wɿ1R4m C Hwm8ɤ-8!J)...򲍭CoE1ƴz Ʉ$ EQ`dY^/qFfp̓Gc=~ƒkf|qu qQ7!33qcx.v$)>=4F5 n_%C)HU.s_QO+gT6Mh[K)j~VՊjvAmOKPlgT}N}+ >? ~) ׿ʩwMFe8J\&=%AܰZ*יz[^WB\/)py0nogDy2o0Ֆ!ZDq#B` qq m:!B84菔Ga ] 2x@GUfQBrB U]#so*p{n:^s.WP{s?dM㭨%\Q;lA8{F7P=LXȲP#)(-9 Yq^YY^P_鈇F:xxRdW̝P/?Z/s#fŦ\2;E8bNm5m$)jg esbXң#& r .>p8a:5 Q5G7:I;ۛ5F}v¬|cL&Bkg0chCU7aq?47f2z '* tz#eį6 ˜e0"rX#USE#AMstf"B ޠODf 9԰0ciaFjxcw7K٧<&I[U~^ĴʲdٴL+ࣵx48p[2xJ 9b>zDZ]/hV| ِi1 n6Jň#ʜ@(n\>“Q ­ iE>:ME@o8bU62<9Rjլ|8R88??ފi8Y}?*c&2",lp-g<L_\3= j{Os<<3Ւ,VJG=.Rf~aONw-ⱨՙ」( xq˦8R-v\UUx<'Op|ml6i|>gAYf䄓!~}~$a4€u]e YMZƠ1`@=a3OdwH1)?ӄlA1)},(W%!)bK\wZ/1IEu[zmU=m012Wzi#Fa% "~ĵ0C2mʐ 5x4i &] )%uyskc܌lQڡ15F)QNHE5N)c 63* 3V%k8e?ěui6FzwsrlW ~=f&nLOsLG1jCQhT~t< i\rVP/kl /#  T48bFcܴ 詔\6ɤ:tnaiEQ[iX,K,k&{mD$<~>-V(ɶ3]U6+6ynh4d= Hd)_{:)A"+NG>OyfΥ0#H\hElW.k/{daLDv*qB)Rgy///xz-[1KOͲb+l-rҝO*crJگ[.iŧ1UN!$~4 ~ AP`09 ~G]4)(/Sދ_yxL5[UnMcV%$䨇C4F<}\mZUwf B q[oD[~Mrle nPÉ}%ZRT:_zs1[ht4Fh4://f$ތ;GP c& 8%Zlɲq8Bj]/&0BhT;jVję]/swN E&e`tw$ཨE>sqC=nCxaB tY)KַtG| b v ~0 Gٖ` qf$ u-X׬1mF}UCC ՊrPu@ s_2:3p}͚e xKA<<&㘓& UUqyyM;$4tJR Z7uR!uC]X=B'CFPηQ '#8@,(݈0 يU1L|(}zqxNMHɂ$O579ꒆEy ?OU.;kLfY;qrrx<+v;GP~w`4rPՖ2Ϲ)%F5=cƝ7x@IՆ-H3Nq]t΅3ܔf s1qQPK"ْG}&!(V)Mg:RSACQUҙq\1&O2QdI?FWS㣄E- *݀0HGO8 xXI/KBMԵ_97)޺ ]֙Ewfb-˲hY6g粵Pz{?{)z7?Y:!@k#eY[rttD$Az|g\]]3}V1!Z*Ů MӐ<+ O o;!]L!=yq:DESIAL߉31ꚦQ(c0 BI9x6(9r\\q"k! z; AjDWKh UR5LC=c)%[{(d2bwI%J;xQ/dԩqez2a8=I  KgJ>J K|\ `T}p~ĮrG3{C:sR"ŮD"FnhtuGO;W vVK*\271yd)De$+hӰ6Ax*|V U+WrxBzQK Co6€R;`htȾ u 4)]ɠMFV 71j?W[Hݰs8쨹~8 jV2zq2'_]?pG_iR9՟Gg=+k_<-(dWƫI6SoW%vO>8=Fy dQ>*>:qZtMՉ"> P- 9::jg\m)mf8۠iys4R MM@}O{>N'J"Y\+V"Q:X<|%* >#>ӂR8  zUV; 3++\Yc"W4RCY}}Ʒ<Ȁv,2fϞ=c:pݧjiT  = &jEws](u"1 Έ.?fo&,2;Ȓ-5B=?B$J\?NsL8dһá"eݸ/MZ%_V#>脓zĬ|w~Cb*ѪA5j\qY-ɚ]Bmg~7i. }oSQV[٦CE4Mm^6nnn$IЊ;cUme[,w(*,fU2?{S&[,3wM7)M d #nMxp'Lzf$(_nX_+> K6b_74qDOLψDMYR,|O6ےP:܁ bw#)eke~Zf-E;XYh+[ιNMץwiz_1˔|I$$]m1D4 (s..,GFkg0f׽?~ͣqpӘ]gX\G;~Fi6-+\gXY#pp . ] B){и5^ڲ*6ro=E*jꭠp*qɠ' S^#V!ncK,#4I3FhcPfmwȞ6-jU#{v];ɞ'IUhNa*]g&a|ҠRwߑH)! [7[Ւ抋|Fx#F)EL j6Uo yNf vo7oP|{$oEp)6C'hE<x$~$#z.FI|%ޢh~E_PeJvyߍ?FRh2TӰmŊ戾s^G?O;8RoRWhgK$Ėi{' f k\L#  >m_l4\.Y.QaaM'Ikb @+x=,˸d<3N[jjK<'jrFka +Be`7_o6l$"yǭd|駜"%V-R!-dik(]꫊8{m(b[Un8`40{Cz!acimpvA I)0lMkf)]{m;]5$I}p8l<#d]no`n.dp<2ڐ+4LM^NlE%B蝂5&[t*04]7BטgS(5 i\LA쬖M@z' 0F7hv qFQo3_e@6>Z&lbQ,jd26x5PTR7fo{ an7` eU ks/2BRT{=0hwYAMb>$X L/S4=#t]  CdЋ}4eJ tS 42 ]#]!'! Fn(ƺ7;J1$N% 﫼KS\` NИ*4݋{U(p]a)=Fx '''-fɻ4"qpRBR_Ss5 &z4Buc@8AL/[6-y% <*DXƀr z7dϨ b#fl7+!O: }6AL{}X*םyh9 "?l~7#nxX9 R-X wBڰw׋'@BTeFY,DAH&NAcR`4(Xo\6t0>zDԸ=Iu%Ap15R[2\q8ow+ w@$Fޢ0EQsx0M"x1J(p|0a#N)6e@zƂp0BS(P+1&~I'7eJ6hB<{b-+%0vFǺwcX'*hm۪4u*$I3TUAYT[Tʤ\ ;.4e|2 :'H`>=SԽcGZpʑ9S)] Fᐁ 5 ȗP6d)kMa[U۵&)mH gFv%j]U,c a?^&y5F=b_\DYb 1hфoTCz!=d\^[yDo<ݦl#s:{}xhUEܾěEZV[jLD=u58U|p })BmbnyI$ē_[SYg?`y­fWxYI2z|-Lq\߾0dqYP2@NA  'wM~+集y*^W\Vf2VT!oͺcF:.Bkz1( b0C GG1^P;>ޝ}`I U ;&]5v8&cio<{4qttvmY{uGwYܰ^[tp:2 zw? z00NIl6[YaHmA=bp8luK}{N6sss͝.!I`- s;TVdO5ESue< q^g7*Eij' e^bbL8kʲj*e)caC10d \]Ylnsʻ{tC(q ~h⺉Mvr6H#q>@fp(Ր4yʬ(Y-s'!rI5NӌɊfe(#&O$8ԙ4.D (mR"s\]3[\FÐAECY-o8ϟO/ bkՐhQ8&ވc9 ʺ_̸Rcw4m*uf4 0IYl7)uB EOqԚW[xaifu2<~u[<_aB>l~'IBoK-evv<srr 6 咛˝U-@ʰh֚,_,;tL;wttԢp[GHUAnXf]W4XP9{=EïפSfq'Hҡ2d+eU(M]U`yqJo4WC>cz*x5k =A+̏n}xupH]}zmԏvIT[[<y46$ #ǣ1M!B́sΦT+ѡbeFƔ|xk h\]W 6#9tlGivϋMd=r5MU_FB; ghkz`.r|7 .9f#a\$"3>jQ  r#,#&,ɷ9('B4Cn:pđfq˂θkY&- Wb8Ayޖly_H\ujUUzݼE:lxٴbbh;UUEώPm׬LV}"CT 2+B]xF"tŦ9&ZdAM{5+3"ZtV-pФĖuZQnKr l3\s#GPnna)@hZV^dE/Q( EAmo}[Hb'p88q5qjb\>kFlm]UDz,㘇2 β,cbê }fu+bKʒܹeYXzkdm 4M@kVÎpJ)TD[V^1TY>?gK61ذP5Ko6W%9Kǣڤ< JِGD.\fUp#zl]þ]V<{>'P/p]SM{ ^%RJ$#qi E8T!qBo53c0f|AưJ$C=פưm?$ ܘ[#˔Y%C:湕]?-P4q_,Bf>`QB-ˈ>?z;d]Γȃ[SXFhW= E b9eV|cQ[ͷA_2>7wK/8*p p~v$ Z#aecNwjY`n6l7ii + F 4oY h(}PRm;^^ 3At+hXwBEhkXa"oX+BJ "r;9FP 9%sv3 pԮ`1Ȳ 9i4z1,P+)PW*q&Bf8b kHaP@h&tr]kV]f>-pB$Vbv#S}+y_j,'FndYSsz ̚ؽO*N k!H۸CT(TKfRX[}JX!شע5 v}6wgZ+B޽^xܷwm `%M:=U 1Rl Һfdcc86ȕ$] 6`Lܘ$q>ýbylc(3*j!ZR9i8ar]gyJ(U 4pD,/jIg O qt4%= iTCuM]ٟe?ùtX qqݝ_XxJ߶QWaBb=˲d^r_5Q!u]3͸퐢("Vo9zE)[Jl6)Ý[k$MvԽǴT- 뙧&Mɳg#[WH \4r4\%UG]\KdMY*{ٹ"[+q./B6j--fӪ|Cׯ`+7j.˲AAlvl=Ÿ%R/Avi]G7y;]R>uh!]HMAxlÊXY Tge[8lێuJ"j9A%& !i -(uNij6xmg(O{na Z[|e?dža֛zp'&%+yeYVnR*׻!|E }ύ wą|_]RۤքjHS6[Kng׹;{:eݶ,VK_A]׭{Ur9nu]\.sȘE~oW"ro+ZQ쵱5L=6mCrlu<,:ٽXVtCzEk_ֽGf/W]dHﻑv/C}Ex]*a@c(3_ hg̖}4M9??'/9$-sۮ)+I,ַ-ʼn; (>f; t_FQ(ZR*ARU R ;cYݟ;T8z> n|]x݀mt;ſE7QIt+i܍-w7n:05nyձd7>׋~%σ{ v-in1e윾Mx7Y:+80hE Se,3IucBu{}+=~??}οMCqmh]6m(rw=)˲MދhC,Ka ,v ' Xo\dWн\ݢb-؝?`nqkѳy7AVǥW=nrٟޗ.bE!C{Y8F.lMZ*¡ȷ 7 ·6Cj;TW2u@b<.< ʀf]J?uӠ.qq'1 08:Q^x \R2[YlDlD777VQV]oj7yC׽Dt"dzEJ-P]<º6ķCU16ޡo skleTԽg6׈Zby(WYڻΆ[UXD& ڧ‹Cղz|?lJDՂfhͥR{s;*B}>6}uxXg2l̳}\7VٰkkS`s\ +daue׼-4xp2麈PmnP[0S8Ͻi7{9Qy̫kB N>\Ma]ٟw~C&ܾKWǡČ(t0[Kpĭ:1p|qCNw:$ z`t|}hޡPP";E:匏F7*̾)6ۡP& vCn*ֻm6i~Z2_ZON^[tP1 ^5bCi} uHƛ6'6n$>/K_5וۦDWU(>Jz8Ts(p,͐y.u)67o$5g7mBt;xKmWC#}о&ym'y- ׬K n]Ti voػRӅߴgUΘuCS$v;wsbrc`G}_.Y^7+-+`d-v7Ixޤc^E]ޭ/..v  <{<ge9D/<Xy{*vHo̿*Vgq^{QOC?o*Mcobe\gݡ.qۇ]w/¼d,bv'߭}z/.cxZ<$X5A߽~qUj?b}YQֿ,9Ojɳ6?THIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/0000775000175000017500000000000013215735076022276 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/Box.png0000664000175000017500000000674013215735076023543 0ustar fabiofabioPNG  IHDRx#_-gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk> IDATx{Uŝ?}ι3Ν 1!AJ0q7ĊR7kjvW7RX1e`L JKP #8d``^=Ǽ`");}ߣ#Z %y@Yb 6h@F (ٛ)@8A `mg_˞N$1c`)AJK PZaLy>U DB^5knVICU#QJ ) 64s=Ύ}M'f+:Al =dΣ5ceE]w/pM L)f vmd,ـlZB$&A1 ֽ9YX%BaJՓuWD,uG|z\ 2p{* !*}GkMgkyݸn'c}v,'fƓ>Q>wMP[HF3j`j,PRl 49ɶ%a9c`7}7䡣%<b&P RPGh^͋nsQEΟb^{I+:H~|{^E߿_WTzgK,+d_CSN ,}!ʯؾq+mîfh`\=bv̭9seong}ߛ/#yf|u yl(#~~] 3RJ"RqUe8'Ĺf};%X2U1:wxöR*ܓ"5)m[KX~_cmuk>BP\}d)xӕxznz<\,*TW;<1 F~J!} oϟ`SiwV1X{OBRhؒ%Lȡl'MF$.B*"R^덄R H`•ek2,HNWl&SVU?òocGy速Ruo~΂mN36 #FK ll3#IG#-v0)Be] ~<[t~e'Woe[Kh lZY@xʧb?ִ2 :ڒN.cX ym4i?CYgя 㿫e[ݞ_B4QQRiG'[:6Q]ʄGغci<N;ڳϩkfXoմ>keFb\]YmX2TY;yY}#qf+~o ѝJ`$&>O=)7>.Ҫ8s&`sM"eC5֚#u̙PǧFǹonU_k)u.%kp79mBXglOXO)CL2A?%!#SAEaaAt {PE6"KY e@ +DoR!BHL5!%BAlRIT$XQF3j9KݶI|Ŵa|祏2ŕ M88R$XޮkCIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/Adwaita.png0000664000175000017500000000635713215735076024371 0ustar fabiofabioPNG  IHDRx#_-gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk> IDATx{p?{KHl6b&Hȍ" HhS80sSV=i홶Vx3g JGE[RI$@.l d<ϻJOO*-,S-Uua|RT5iHLHĝr(Ts١DBt),(pN\`(HSs6#^+P-*Ph4B7`u 1 v>0 RS, `iljdά9S=ߗ~6@00 V넘O%dqNŊS-eGT DJɱF.@+w3uyi=J 0iOUUf&$7wLפ../ ;dܸ<#\42~V. 4L K}c=e2]qiv-0veŞ =/GHLH) #=ݎ_8~eť$&&^B0 !_43nq+n=;*[?4^yKqq y1ʙͬٴ4\qyX{zZZ{iy~zn\i?1GՂ-!6q{OzzBm[XJ $ iXg%K͋;yq *c@Ql,yx]ҏyi]̄Smbw4 ϽyXFu=?l(d: v<0䃣g6|uzGx< %gN_#V$7(Du5қ'8DT;j1*w p'?dW߻۾j S [wMY5_Ɠo9TSw_oopW6屝^J6 )MNts{[{RHiS<{n)/S؉=,Mdµsxrr]2s@ PNʷ?O`{w4V] p:~oݸGn| Xӹid A2(-Kz/`=X}+B4]twY=w{ /Y{[ yi?ɶ[eՒlvRp08jCaxAJgr?D,LN:E3tsFƦG"W|ooK/ZĈ !a^Q|GnrHӐ$J&ݏ&$dX->)2b(P3=|b6o(&hH7h;7ᦥ$&&bfԤ/EEMkRDXp:14-iiZU^R288ȐfU*X[ɇ&CAy cyI$ Eh=qf&cB(KK]dE\ȥ룪 !CN͛gfY63f@iL@ۃŢbQ,L״" W-QUʝ+2XTTUyK))ĮLL0C}p78Œ.K־W{tykYi7s08۰SY>[,K^]ףkEdpP0nϥǁv*k;h?9^CRRҧ?y;v!6uٸ2}[*ԴpMnVfaˏwFG$,@g$5~!t܋XF!Sf2m{Ǡ\7g_@&rpIDDi;tˢb(8a8 f]i3f̈FE rO̧AZN45.nUE阦Lcfr*!-Dfz{zYyO\ÆjJ -Â=1$Bp8lXHabb* jWV@2dlņajQFHt bOh WdN#lY'/ȺukΚ q9$%%oޮNv_/Ygʎc͚ո\YLn(hF9?>_'_ɦ/o&999.1,#䘄;)ƐG / }=hFpP1A00Z5C>Ce}\^ZAee%+W]E# A>.9TX񮯰t]âP0D]1>6mLrRy\{Mh4QUu\ϲ`BLaƮ OMIeXI9%%{- B!'\:<&)) $8+SON& Q8i3¢E)ZMdCQg~ ,Zg(bu]'wqχnt]nD&22k`&ݽN8r;^Po_/,T2%tg#eM8NIOKtr_Wl6V-b!yę]Qd7;U"&*x㪂9*x㪂9*x~|%tEXtdate:create2014-09-17T15:48:35+02:00T%tEXtdate:modify2014-09-17T15:48:05+02:00(\tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/Adwaita-dark.png0000664000175000017500000000503413215735076025277 0ustar fabiofabioPNG  IHDRx#_-gAMA a cHRMz&u0`:pQ<bKGDtIME "6nIDATx{pT?MټI6$@jjǩSi5Ѫ RN[|q) 4TA% Adߏ$ٰd$;@f3gws;.d1c!dYXBAb(auP<㽔C QYUb n08!$\BNJ2R@h~uBA$KK6 0"s !BuYYᎏdh$,Gւg8R,8k3-zB%'^ZVK(B jqK4BkXslbɝx}\#uKn!e.9Tp1OfMjih ʕn¡ ťeT&'wHqU% p GA!UjUiq{s= o& }7x?ڊz켨]ʏCihy'M|pAwC9rM8Ɖޔ T#`壏^ٲW>N2JJh'ONn4I:k^x5/:/ 2#0jF>;CaaQ @0:5Zknjց96e_mSbi|oB݅W),.!''7F6IIUS z}Xss㯳ׅSjEHbI),ȲB5b'IjF"$tQ2 ]'@JWu`,QXTL(LHE&H¢Ys=;@=͊$ Dtb*\~ zT.(uV|¢bʆǦjjV q5F(  '\͆=AINn2!lւBYE%I$IH<`E!>lxy,>9+i(C)C IҔgl=Ñp$,+ ZxB g($[tN'7ώj,cn5ZvcVb%tEXtdate:create2017-11-13T18:34:20+00:00kV=%tEXtdate:modify2017-11-13T18:34:20+00:00g6tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/unknown.png0000664000175000017500000000030613215735076024502 0ustar fabiofabioPNG  IHDRx#_-bKGD pHYs  tIME  2!RSIDATxA0Rd%l*I?[XXX 0````,,, XX )@IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/README0000664000175000017500000000141513215735076023157 0ustar fabiofabio HOW TO MAKE A GTK THEME THUMBNAIL? ---------------------------------- - Install ImageMagick ("apt install imagemagick") - Open a terminal and run "cinnamon-preview-gtk-theme mytheme" (where mytheme is the name of the Theme you want to thumbnail) - Press Alt+Print-Screen to take a screenshot of the window - Go to your Pictures directory and move the screenshot to ~/screenshot.png - Open a terminal and type: cd convert screenshot.png -gravity north-west -extent 120x35 thumbnail.png WHICH THUMBNAIL IS USED BY CINNAMON TO REPRESENT A THEME? --------------------------------------------------------- - Cinnamon first tries to find a gtk-3.0/thumbnail.png file in the theme directory - If it doesn't find any, it looks in /usr/share/cinnamon/thumbnails/gtk-3.0/ Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/gtk-3.0/HighContrast.png0000664000175000017500000000313513215735076025403 0ustar fabiofabioPNG  IHDRx#h>gAMA asRGB cHRMz&u0`:pQ<PLTE9?A.46FKM?EGUWSbd`Y[Wnplvxuݼ~mnk^`\gifxzw⑓prnlmirtpˊL6;TszHK{}ylnjopmL;ZѱN0J}|ZDžB:eb?X|IHrG.xuEGxɊPB{쓔Я}E=_e6OϔR5cuGP͏R?t쥦bda|E:ZhAUoBF?CvhifͭzB4G}іVA]Ԥc;6D͍PAczG>WēWDFAFHQbKGDH pHYsHHFk>IDATXc`HdY YIbb) 4b1'5,M2@`__PrQEbaQ1q I)iaŲ B%)-XQSYEU@M]S^35iU[Gf by9C 9Moili Qj%9[8T&;{N)4sttvquseA!aQ1q x,6IĒ8pJc85-=jq&Y9yE%e؂Z d\T t, pJ`*]Lkj99[ZڱỴ#b~IɜI}݃iqo_?焉&O9m؂zl9scy8V/=,\x eˁY $WB|b`80żS,[]~Mlݶ=s]`b8Xd1$qhVkPQPUQUđ;~gzgN8wK "򕰫׮GᷘSb>'Vnܼ+^1-&"!:_\B\L6jBa^>~#d1jdjXLF;,\dE1],v5#;+YaQ0 ;0%tEXtdate:create2014-09-17T16:00:10+02:00ٍ%tEXtdate:modify2014-09-17T15:58:09+02:00.tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/wallclock.png0000664000175000017500000002730313215735076023701 0ustar fabiofabioPNG  IHDRll pHYs  tIME7 IDATxyurr UaGJWgyd}Ծ/H@D- AHXeٙ_Y`||>O_P Z5k*i \/[pVJӂZ? r/-YgśrW1 Knt[x<^QYp3f{eeeqoI_P◷f|]V)hߍKk׮_O:}mj/SZQ&MSݏ<ȓN8aĈ}Y߾%%ӦM{>Y:m݃۠ }?>+++9[kjj^{7wH$GVpx=8ӾouҥoVhtɒ%>货\ZW)|6gA,H\lo-oMRAk*H:zm~:nOi0ԼWw"AllCmxO %+ǩ.Q)p8{]:'6,oUQ999w6,j]pxn{jkj v}/}YYYXtMms>[nY|cj"K.GgqFnZ=n~(%DQ"JDT gg爨VcĈ;Ҥ+<⢢Tʲe˦=tkjYD_qբ6 ڵ!.}޼/`Deffs17xW3=שfdd1⛇qƒυn "kѩnBP^}UU-jf(%DQ"JD(#K.xॿ%\_kuYQ [=~|ߎpxĈFzBETNnOu( = ?~CCCJ"Go{;ǣh}}}, B?w-[,\9ǒQ"JD(%DJKFAAv{_0C G[oD"A( BpM7t?/77~:3##c[F"H$[PP-ͽg?+,,k:5eo5^D"O>dܹϟaÆΝ:um{^{nr=sss/%%f0"5jjj˷_PxryÇU\|um**+.X .dҺp8WԳnvtA}M+xॗ^zwXvۑyYgmxii9s^z~jժX,QTTȑ?SO9.R)9 ^Dy}=fjr@P(?nܸO?}ag .o)/h?XvvvuOi6mK/&|Go%rw5'tRW_})S}fm] z1c<>}$B$}k;rP(t 67{g!==}#.C9$*+_-ߢ;~.Gm<.Ks9_{oRGcJ|i.s9_;n:4Eҽګ >opUͳ>f͚NN=唄 s1ϓZlذaUWk?ǫ{y3g߿~ =>dȐgW윈9r еkao\.׭[]/\UY{&3LOO=z;s][ ~|L؁uuu]-VhM;SQ^'pS^޴~(%DQ"JDT *U?h4E|ݺu=~׮]ݪgQ;/9֯_<[x|ҥ?=ׯ駟޺1S"K.W}dəgskXr]ҦԣGK/K.Xnݺ?>_{z[Eчy{СM0@D}ϟ?IWuw~vᅳfY[[SL |UUWLkb6mte͞=;yY9-=#<\ .-h4SO]1iRW;V?tЄӕiii[x{ﭪJޥKAH/ҳ9sbŊuv-q%OM̳϶>IW^qƄEEEMzyg'_XQQW\`V3=5mڭݶeddS{ycpɺE-^ubŊ> abVV.# xIIIUUN<`رÆ Ki{79 Zd–ApGѱi?~Ϙ1HCCÔzMn 8o=z$O\hQߎ꒒-zR"p8|O|ƌ.Yƙ766>#^0cǎ-%{;.v;L;TQQq'=昖VJz;6lЖt/-+KD1:whVggfffOHd(Zw JKK۸q?p ˗-[lY~wd+Ƀ?mL.~87[tE#yđ=ǎ֭[Vh[lYte|~cӦM)6pKy¤Z;w߿w}@S훙Vm&VUW܆$E"/늊%%%n$u]sѭ8 v\nn~opdpEW%Oy[m޴ [OMVUUuW۷OczA tI'[sɿVYYymqu `gp&ˣ|&Ap1t=UKi % jj"***iqH4[wԋ/SNy?`zzz>},իW_|ŷzYhll|y'~7դ&9eJJNFP҂ -nV/R!TYYٌ!rssDUUUk>V"*---/Y䜟Gz/k =766uMh/m?4p࿽?99s{6?77ӧOX,Ь}={o?j%yYM]4XYUojll$AVnڵ;wy{}w}W^I<:T6mc%qe]nÆzpxС7p%\?M6Ѥx<ۆ漼;jjjib&+U{sKzV {-'?p> 9{'&7jԨ{ʫz} 閕տ_?+.*j[b#嚼"1 b)UvV'?E#͛7Ϟ=^Xfȑ#7ƌӵk')&L5z&͜9("[v_|y ӧ-ZT^^ 蔗׽G}[vlIP Sj5M]N BMjut;wq7S 6<쳏<ҥKΝ{xqv= `A.^hLQ /L>{>ݣ<%K͛E+WܼiS]]]8==//G2d!C ύ7W/55x+%LllllMeAy}vC>83cUUU>N;m9ɻO>K.|E땗___߬_>U󬬬lrnk֬혈*-+K^Pqqv.+++y5A-^kN-:|կ7qDmRWWwwpIOMVQQі\jԩ'|C? chڵ v-鰈۰q_wVGn֭_E-Z(azFFƏO;a hX,sO<ݷrժfM,Xpm?K.;wn~NwTVV~bElNUUƤ޽[{,SN kjk76# U]] 7޸p¶+WN<9ƾ}~C̙3wݺ3+_ʨQשSp8 bƺHdƍKJ/^lٲ?x5HSON5kt̆~}IH}re7xۙ6mT]]Uz'Թs鯿]***ω"%a0}կZL]]ٳa'GjtPx<o$_L؄r.!ņYgp*=36m+UI4(UOI #tsQEE7 Qh*yz޽Sx, u-yeeemBE\vezJzzh|__r9s&fffOlݻw?{Ko.p/6oN3cƌIoVIDAT>rs0~](:Nvv矟|!%>SSSO$ߋ5v Ƴ=p~|h'oz .LÆ mT]wuذa ˗h D%++383,XGى1k֢EW0`@[ Fhov/#8߯_E=wz!w򤥥M6*//zoC''O3իפ+8߼ymW^y=ǎM>\u\zi(޽_~!$e,{g>1#ddd6n?zԨ&b/L~ՕWV' /|Guԉ'<}oV"*--ow}'pff)?n\qK,~B=FUW}k_K.X,裏2㕖niiiM7<;ΉAp!?u5^;s̆f0W.?y=,Yr)[DT; SNiiiAڿk ffdt-,llںvڐN:cرt٧x[Dѧy//۲VF{8lܸBo|><'\fMBPWq <㌢~onhՍFoxA >oy䑅 V5\dee 8pĉ'pB_c sZ55cI|]V)ho;f̘>33cРA ߡ+*+W\ٜ;Wn'xbl癙YYY999zӧOۿWSS3m97|6DsK.moҷo)w16¹BhÆ oٳ?X,7xӧO/^|ƙg._£?CV$;ww]lY$ihh陙˞{{ン;wnr&7t-ޚ| V[? RlςvYJ[gݱ [ޞpm;RTu >uܞhӪaAAG-y/ cpEf}j VןAJV$hϏS[3]LTC6rVϡK{Gs~{nAeArrr>_炚s'pO?]__|!ߑUVr˘ѣ7*ch1+++ւ:/_ޖu+++Kn8~ᄆX,TVVVUUEѼΝ;S z;s@ K6######/P(u\ee域|O|'}N>:sfΜBp8+++77w~obz̳Zxqm\x3flg pnnnQQڻwSwuoODʖŗ^:SϿQWXqO:宻QsީS:e˖j֬Ysyvu뮘4i555sr/ʞ={6痣_}~s#Ɩ^}oօ\0ž̘[^}h4k+**&_woqy>999UUUoqE  H6lfz뭷֭_;RvC4+;Ǐ'1bD^^_U]]hѢG}/?_^^NF_ 2ӻu֫W‚p(mٲenذa뛕a"JD(%DQ"JDGTG}<ۥ;|Q"JD(%D9et> DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQ( DQZM+IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/0000775000175000017500000000000013215735076023170 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Atlanta.png0000664000175000017500000000125713215735076025267 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<~PLTE!!!֦zzz)))000***~}}| ubKGD- pHYsHHFk>IDATHǽk aNXieivhreF9BF#Jd()nݹ,P>—P< kiHd{ǐ@rS "eHd N〫rDFL ŞϡK~J ײH}v$InEH׋>\wH{OM i^ey J(#XIH+7i6ig %tEXtdate:create2014-09-17T14:48:56+02:00E)g%tEXtdate:modify2014-09-17T14:48:53+02:00 |tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Crux.png0000664000175000017500000000203113215735076024613 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<DPLTEpppjjjeeeaaa___^^^RRRװ\\\BBBܸ˥WWW888ěTTT222ԩSSS000ФQQQ///}}}OOO...~~~MMM---JJJ+++HHHFFFEEE<<<'''&&&ŝvvv9AbKGDi pHYsHHFk>IDATHǵGS@aP@`E%XA)"؂bGH89df y l6.đәq#(Oo~U>?H@`0¡Ȱ 4DcxbGFAwdjbGLC͘ lzG,)|1 %..-ȊUC9>ِȆ,PmCP,KM؂U '6TIށK;] ؃ʾ֠b wqH14MC5pF4CuD- :pE!I"WozjԕCټH$}DTIQ'@"/r*$жW@IM*yG>OxK*G~_X C%tEXtdate:create2014-09-17T14:45:26+02:00~%tEXtdate:modify2014-09-17T14:45:19+02:00 dxtEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Box.png0000664000175000017500000000076413215735076024435 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<3PLTEHHHIIIJJJ VbKGD- pHYsHHFk>IDATH @ Q;ڣO[֪   c#F߉D.'d"wY5~#\ښɌxHHty$8JVs*5930>x1+Rky:%tEXtdate:create2014-09-17T14:44:14+02:00:%tEXtdate:modify2014-09-17T14:44:06+02:001tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Esco.png0000664000175000017500000000304413215735076024570 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<PLTE!!!֚|ݳٮժݽ̻Ѧ۽ںӷ͢ٺ׷ֵ'xQ% #OwB I۫xM-$Cnњd; +CnɞַԴӲ qM4@:% H}$8DD<1#%ŚӴЯ!q:hD-s!v׆)tNkбͫvelt"z7;>&9Pmֿ)l%s!zKhoooooovЦcL;- 5Ȩʬr_äG S򟵊ťҺǩJ )=EA6(7$1,IDATHc``=```=```&Pl-a'ppr(- x*A4іH@ED%4DFVN^AQIYEUM]YSKUGWYf1Nd TDT\̇.K+ amckl '@&+$o-  cdgMHLJNIMKĝY`aAy`K KJ˘+*٢fI#NW3 hIwOooo_&Oa: ft kL!Y<4K̝7BE,]uUaDE`4_ \tK6nb޼e;Zwڽy>%a \d?::2=rG'N:}9f `\%pK^RW_ CLЍkw@4і%ܻDmC і<]i=-yBcl [*`K@,yF[@GK@,yA[@GK^@,yE[V8a%tEXtdate:create2014-09-17T14:49:54+02:00Sp%tEXtdate:modify2014-09-17T14:49:51+02:00}ktEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Adwaita.png0000664000175000017500000000117313215735076025252 0ustar fabiofabioPNG  IHDRd +.bKGD pHYs  tIME  .tEXtCommentCreated with GIMPWIDATh1o`u33B eBL+"P5HA-W mǐUv{dIWɲ#>߇8!j)8Fo_$2HIvKZR.\Yڵ!5;A`UaHt fH0Cf 130C̐sO|xJ|j=@77O}al<{IA"'(:BD:AD9AD9AC9@C8@B8?BAGJ8?A@GHjoq7>A@GICJMtxz7>@kqr?FG6=@?FHuz}6=?BIKKQSLRT9@B65;>5;=4;=4:=4:< pHYs  tIME {IDATHǽ 0᳉;ApCUVZxS |p7K~BQ4E|@h>(IDATHǽRPߩEDD *b%!]T|>7Y0>cv3atL1Di\V׎y$g$yOaю%GBQŠ֤6(ۑXp*/P##ݽ~};Q؎FSZə`gxoRw}>tK|Kȏ>՗Α?`H\0,%tEXtdate:create2014-09-17T14:51:50+02:00W%tEXtdate:modify2014-09-17T14:51:45+02:00LtEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/unknown.png0000664000175000017500000000132413215735076025375 0ustar fabiofabioPNG  IHDRd +.bKGD pHYs  tIME   d;ltEXtCommentCreated with GIMPWp$]rK9\J!uɓbHuR9?Ki2v`c5~"Z `d:?ߖ.`AJ%8Bm[00ΜGف \t˩ZkϝvG*'Z.}LQR BꭨCRƉ܇qi<k"@jWo(kolw؀,%(NX>-rKq:9bp1J)pοCsIpS4Ƙsf4_.NSjH_9Atɝ\AJkX`ҲB=He4D@! ZdyོIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Simple.png0000664000175000017500000000124513215735076025131 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<PLTE!!!=I1kkkp|ЄnnnBBBttt%%%000XXXeee,,,jjj]]]LLLij111CCCGGG-sċbKGD- pHYsHHFk>IDATH0 +2 *ų5@fe[¾klcp;wq% I($6*w$H5Ȓ8J&dI3%%Q\O"j. \mkҜmU.$쮦daYI8b)YrXi]/H[ 챜&_gj?1_%fPreƞ JؓIENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/README0000664000175000017500000000126713215735076024056 0ustar fabiofabio HOW TO MAKE A METACITY THUMBNAIL? --------------------------------- - Install ImageMagick ("apt install imagemagick") - Open a window (Nemo for instance) - Press Alt+Print-Screen to take a screenshot of the window - Go to your Pictures directory and move the screenshot to ~/screenshot.png - Open a terminal and type: cd convert screenshot.png -gravity north-east -extent 100x32 thumbnail.png WHICH THUMBNAIL IS USED BY CINNAMON TO REPRESENT A THEME? --------------------------------------------------------- - Cinnamon first tries to find a metacity-1/thumbnail.png file in the theme directory - If it doesn't find any, it looks in /usr/share/cinnamon/thumbnails/metacity-1/ Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/HighContrast.png0000664000175000017500000000131113215735076026267 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<PLTE uuuYYYbbbhhh !!!222///&&&''',,,***000)))%%% ...###iii555 444(((pppObKGD5޶k pHYsHHFk>IDATH0:uVR(UyoH6An^ TTkul }x.MtP+!DD Esj1gP怤gҰyL^ǥB"E nʤ^ B \ogEi+,2޾cÍwΜUV$s4P"> <G'/1SO\)Þ%tEXtdate:create2014-09-17T15:04:08+02:00%tEXtdate:modify2014-09-17T15:04:00+02:00[ tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/AgingGorilla.png0000664000175000017500000000422713215735076026242 0ustar fabiofabioPNG  IHDRd +.gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>gIDATh[lS?8vnv$RĠ2[UljҤIq2:6کn4B DZߎC @²S]]ͥKPX l8xJ ~̙رcw׷lٲ3pr]]]=#IOOϢ4п7{Go^y/etxضTUֱ57}&\Эloa66Jg8÷9GTL$ =#?F ׷tH6d|d<-ɾZuA UHf%qLE ::7dǨu aNITŞR ?M!P@4 M ɺfcZBnMS1{^Cy\զ`@k_B27Wɐpi78 u!m[ZBp@ؐL A<1PG1%+ZԆQz{$>[C\%CZYT7A.[ZCzϻ,\D~wOd5?SȠ>43Qۅ=%WL0|wB_ T+PEBlv)uue붗ij9WH)4#Div[C"Fz%0 3)I p7OSRp!foR!i:U vѻۑ%4 tmĮڮдxC6]U47_rgpGt۩Si͟ITB8ᶝkэ sXd:%K֚s \U}g׬C* 2ydWJ=F{8˿J*>LtpIW@;8Mҁ7/yTQP*L} N|f0#IΖ]eI'n$ '(8 f]m E:Y\G07~wrT:O,^U %ݿNN:ů^c*-u >clH2``lw. ;Uw}N8QKJp=eC" CQ&&&XxŶpq0j!TZbˎ1d j9EץeZl@Pw[o{nPpƧKr؜d:XC9+BƵTC6[s,|>mx_yvй Ou U,um;}ogXt&+<8l)%tEXtdate:create2014-09-17T14:37:21+02:00P%tEXtdate:modify2014-09-17T14:31:39+02:00itEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/thumbnails/metacity-1/Bright.png0000664000175000017500000000107213215735076025115 0ustar fabiofabioPNG  IHDRd -gAMA asRGB cHRMz&u0`:pQ<EPLTE!!!֚|444)))000***'''+++(((...bKGD- pHYsHHFk>IDATH0 (ŚAu #hd'=_!@3Er*ہͬ nX:FݙTquǨMyqol 0(bܵHUr"! 恷W"~Xz/RLb3+V6?Y~W?c3p4Nh"o97av%tEXtdate:create2014-09-17T14:48:14+02:006%tEXtdate:modify2014-09-17T14:48:08+02:00tEXtSoftwaregnome-screenshot>IENDB`Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/0000775000175000017500000000000013215735076023075 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cinnamon-menu-editor.ui0000664000175000017500000006174013215735076027474 0ustar fabiofabio gtk-cut edit_cut gtk-copy edit_copy gtk-paste edit_paste gtk-properties edit_properties gtk-delete edit_delete 5 675 530 True Main Menu GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 2 True GTK_BUTTONBOX_END True Restore the default menu layout True True Restore System Configuration True GTK_RELIEF_NORMAL True True True True True gtk-close True GTK_RELIEF_NORMAL True 0 False True GTK_PACK_END 5 True 0.5 0.5 1 1 0 0 0 0 False 6 True True 200 True False 6 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True False False False True False False False 0 True True True False True False 6 True False 6 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True True False True False False False 0 True True True False 6 True GTK_BUTTONBOX_START 6 _New Menu True True True True GTK_RELIEF_NORMAL True new_menu_image Ne_w Item True True True True GTK_RELIEF_NORMAL True new_item_image 0 False True True 0.5 0.5 1 1 12 0 0 0 True GTK_BUTTONBOX_START 6 gtk-cut True True True True False False 0 gtk-copy True True True True False False 1 gtk-paste True True True True False False 2 gtk-delete True True True True False False 3 gtk-properties True True True True False False 4 0 True True 0 False True 0 True True True True 0 True True 0 True True restore_button close_button True gtk-new True gtk-add True gtk-go-down True gtk-go-up Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/0000775000175000017500000000000013215735076023641 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/MainWindow.py0000664000175000017500000005236113215735076026276 0ustar fabiofabio# -*- coding: utf-8 -*- # vim: set noexpandtab: # Alacarte Menu Editor - Simple fd.o Compliant Menu Editor # Copyright (C) 2006 Travis Watkins # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA import gi gi.require_version('Gtk', '3.0') gi.require_version('CMenu', '3.0') from gi.repository import Gtk, GObject, Gio, GdkPixbuf, Gdk, CMenu, GLib import cgi import os import gettext import subprocess import shutil from cme import config gettext.bindtextdomain(config.GETTEXT_PACKAGE, config.localedir) gettext.textdomain(config.GETTEXT_PACKAGE) _ = gettext.gettext from cme.MenuEditor import MenuEditor from cme import util class MainWindow(object): timer = None #hack to make editing menu properties work edit_pool = [] def __init__(self, datadir, version): self.file_path = datadir self.version = version self.editor = MenuEditor() self.editor.tree.connect("changed", self.menuChanged) Gtk.Window.set_default_icon_name('alacarte') self.tree = Gtk.Builder() self.tree.set_translation_domain(config.GETTEXT_PACKAGE) self.tree.add_from_file('/usr/share/cinnamon/cinnamon-menu-editor/cinnamon-menu-editor.ui') self.tree.connect_signals(self) self.setupMenuTree() self.setupItemTree() self.tree.get_object('edit_delete').set_sensitive(False) self.tree.get_object('edit_properties').set_sensitive(False) self.tree.get_object('edit_cut').set_sensitive(False) self.tree.get_object('edit_copy').set_sensitive(False) self.tree.get_object('edit_paste').set_sensitive(False) self.cut_copy_buffer = None self.file_id = None self.last_tree = None self.main_window = self.tree.get_object('mainwindow') def run(self): self.loadMenus() self.tree.get_object('mainwindow').show_all() Gtk.main() def menuChanged(self, *a): self.loadUpdates() def loadUpdates(self): menu_tree = self.tree.get_object('menu_tree') item_tree = self.tree.get_object('item_tree') items, iter = item_tree.get_selection().get_selected() update_items = False update_type = None item_id = None if iter: update_items = True if isinstance(items[iter][3], CMenu.TreeEntry): item_id = items[iter][3].get_desktop_file_id() update_type = CMenu.TreeItemType.ENTRY elif isinstance(items[iter][3], CMenu.TreeDirectory): item_id = os.path.split(items[iter][3].get_desktop_file_path())[1] update_type = CMenu.TreeItemType.DIRECTORY elif isinstance(items[iter][3], CMenu.TreeSeparator): item_id = items.get_path(iter) update_type = CMenu.TreeItemType.SEPARATOR menus, iter = menu_tree.get_selection().get_selected() update_menus = False menu_id = None if iter: if menus[iter][3].get_desktop_file_path(): menu_id = os.path.split(menus[iter][3].get_desktop_file_path())[1] else: menu_id = menus[iter][3].get_menu_id() update_menus = True self.loadMenus() #find current menu in new tree if update_menus: menu_tree.get_model().foreach(self.findMenu, menu_id) menus, iter = menu_tree.get_selection().get_selected() if iter: self.on_menu_tree_cursor_changed(menu_tree) #find current item in new list if update_items: i = 0 for item in item_tree.get_model(): found = False if update_type != CMenu.TreeItemType.SEPARATOR: if isinstance (item[3], CMenu.TreeEntry) and item[3].get_desktop_file_id() == item_id: found = True if isinstance (item[3], CMenu.TreeDirectory) and item[3].get_desktop_file_path() and update_type == CMenu.TreeItemType.DIRECTORY: if os.path.split(item[3].get_desktop_file_path())[1] == item_id: found = True if isinstance(item[3], CMenu.TreeSeparator): if not isinstance(item_id, tuple): #we may not skip the increment via "continue" i += 1 continue #separators have no id, have to find them manually #probably won't work with two separators together if (item_id[0] - 1,) == (i,): found = True elif (item_id[0] + 1,) == (i,): found = True elif (item_id[0],) == (i,): found = True if found: item_tree.get_selection().select_path((i,)) self.on_item_tree_cursor_changed(item_tree) break i += 1 return False def findMenu(self, menus, path, iter, menu_id): if not menus[path][3].get_desktop_file_path(): if menu_id == menus[path][3].get_menu_id(): menu_tree = self.tree.get_object('menu_tree') menu_tree.expand_to_path(path) menu_tree.get_selection().select_path(path) return True return False if os.path.split(menus[path][3].get_desktop_file_path())[1] == menu_id: menu_tree = self.tree.get_object('menu_tree') menu_tree.expand_to_path(path) menu_tree.get_selection().select_path(path) return True def setupMenuTree(self): self.menu_store = Gtk.TreeStore(object, str, bool, object) # bool is unused, just a placeholder menus = self.tree.get_object('menu_tree') # so object is the same index for column = Gtk.TreeViewColumn(_("Name")) # the menu tree and item tree column.set_spacing(4) cell = Gtk.CellRendererPixbuf() column.pack_start(cell, False) column.set_cell_data_func(cell, self.icon_data_func, 0) cell = Gtk.CellRendererText() column.pack_start(cell, True) column.add_attribute(cell, 'markup', 1) menus.append_column(column) menus.get_selection().set_mode(Gtk.SelectionMode.BROWSE) def setupItemTree(self): items = self.tree.get_object('item_tree') column = Gtk.TreeViewColumn(_("Show")) cell = Gtk.CellRendererToggle() cell.connect('toggled', self.on_item_tree_show_toggled) column.pack_start(cell, True) column.add_attribute(cell, 'active', 0) #hide toggle for separators column.set_cell_data_func(cell, self._cell_data_toggle_func) items.append_column(column) column = Gtk.TreeViewColumn(_("Item")) column.set_spacing(4) cell = Gtk.CellRendererPixbuf() column.pack_start(cell, False) column.set_cell_data_func(cell, self.icon_data_func, 1) cell = Gtk.CellRendererText() column.pack_start(cell, True) column.add_attribute(cell, 'markup', 2) items.append_column(column) self.item_store = Gtk.ListStore(bool, object, str, object) items.set_model(self.item_store) def icon_data_func(self, column, cell, model, iter, data=None): wrapper = model.get_value(iter, data) if wrapper: cell.set_property("surface", wrapper.surface) def _cell_data_toggle_func(self, tree_column, renderer, model, treeiter, data=None): if isinstance(model[treeiter][3], CMenu.TreeSeparator): renderer.set_property('visible', False) else: renderer.set_property('visible', True) def loadMenus(self): self.menu_store.clear() self.loadMenu({ None: None }) menu_tree = self.tree.get_object('menu_tree') menu_tree.set_model(self.menu_store) for menu in self.menu_store: menu_tree.expand_to_path(menu.path) menu_tree.get_selection().select_path((0,)) self.on_menu_tree_cursor_changed(menu_tree) def loadMenu(self, iters, parent=None): for menu, show in self.editor.getMenus(parent): name = cgi.escape(menu.get_name()) if not show: name = "%s" % (name,) icon = util.getIcon(menu, self.main_window) iters[menu] = self.menu_store.append(iters[parent], (icon, name, False, menu)) self.loadMenu(iters, menu) def loadItems(self, menu): self.item_store.clear() for item, show in self.editor.getItems(menu): icon = util.getIcon(item, self.main_window) if isinstance(item, CMenu.TreeDirectory): name = item.get_name() elif isinstance(item, CMenu.TreeEntry): name = item.get_app_info().get_display_name() elif isinstance(item, CMenu.TreeSeparator): name = '---' else: assert False, 'should not be reached' name = cgi.escape(name) if not show: name = "%s" % (name,) self.item_store.append((show, icon, name, item)) #this is a little timeout callback to insert new items after #gnome-desktop-item-edit has finished running def waitForNewItemProcess(self, process, parent_id, file_path): if process.poll() is not None: if os.path.isfile(file_path): self.editor.insertExternalItem(os.path.split(file_path)[1], parent_id) return False return True def waitForNewMenuProcess(self, process, parent_id, file_path): if process.poll() is not None: if os.path.isfile(file_path): self.editor.insertExternalMenu(os.path.split(file_path)[1], parent_id) return False return True #this callback keeps you from editing the same item twice def waitForEditProcess(self, process, file_path): if process.poll() is not None: self.edit_pool.remove(file_path) return False return True def on_new_menu_button_clicked(self, button): menu_tree = self.tree.get_object('menu_tree') menus, iter = menu_tree.get_selection().get_selected() if not iter: parent = menus[(0,)][3] menu_tree.expand_to_path((0,)) menu_tree.get_selection().select_path((0,)) else: parent = menus[iter][3] file_path = os.path.join(util.getUserDirectoryPath(), util.getUniqueFileId('alacarte-made', '.directory')) process = subprocess.Popen(['cinnamon-desktop-editor', '-mdirectory', '-o' + file_path], env=os.environ) GObject.timeout_add(100, self.waitForNewMenuProcess, process, parent.get_menu_id(), file_path) def on_new_item_button_clicked(self, button): menu_tree = self.tree.get_object('menu_tree') menus, iter = menu_tree.get_selection().get_selected() if not iter: parent = menus[(0,)][3] menu_tree.expand_to_path((0,)) menu_tree.get_selection().select_path((0,)) else: parent = menus[iter][3] file_path = os.path.join(util.getUserItemPath(), util.getUniqueFileId('alacarte-made', '.desktop')) process = subprocess.Popen(['cinnamon-desktop-editor', '-mlauncher', '-o' + file_path], env=os.environ) GObject.timeout_add(100, self.waitForNewItemProcess, process, parent.get_menu_id(), file_path) def on_edit_delete_activate(self, menu): item_tree = self.tree.get_object('item_tree') items, iter = item_tree.get_selection().get_selected() if not iter: return item = items[iter][3] if isinstance(item, CMenu.TreeEntry): self.editor.deleteItem(item) elif isinstance(item, CMenu.TreeDirectory): self.editor.deleteMenu(item) elif isinstance(item, CMenu.TreeSeparator): self.editor.deleteSeparator(item) def on_edit_properties_activate(self, menu): item_tree = self.tree.get_object(self.last_tree) items, iter = item_tree.get_selection().get_selected() if not iter: return item = items[iter][3] if not isinstance(item, CMenu.TreeEntry) and not isinstance(item, CMenu.TreeDirectory): return if isinstance(item, CMenu.TreeEntry): file_path = os.path.join(util.getUserItemPath(), item.get_desktop_file_id()) file_type = 'launcher' elif isinstance(item, CMenu.TreeDirectory): file_path = os.path.join(util.getUserDirectoryPath(), os.path.split(item.get_desktop_file_path())[1]) file_type = 'directory' if not os.path.isfile(file_path): shutil.copy(item.get_desktop_file_path(), file_path) if file_path not in self.edit_pool: self.edit_pool.append(file_path) process = subprocess.Popen(['cinnamon-desktop-editor', '-m' + file_type, '-o' + file_path], env=os.environ) GObject.timeout_add(100, self.waitForEditProcess, process, file_path) def on_edit_cut_activate(self, menu): item_tree = self.tree.get_object('item_tree') items, iter = item_tree.get_selection().get_selected() item = items[iter][3] if not iter: return if not isinstance(item, CMenu.TreeEntry): return (self.cut_copy_buffer, self.file_id) = self.editor.cutItem(item) def on_edit_copy_activate(self, menu): item_tree = self.tree.get_object('item_tree') items, iter = item_tree.get_selection().get_selected() item = items[iter][3] if not iter: return if not isinstance(item, CMenu.TreeEntry): return (self.cut_copy_buffer, self.file_id) = self.editor.copyItem(item) def on_edit_paste_activate(self, menu): item_tree = self.tree.get_object('item_tree') items, iter = item_tree.get_selection().get_selected() if not iter: menu_tree = self.tree.get_object('menu_tree') items, iter = menu_tree.get_selection().get_selected() if not iter: return item = items[iter][3] if not isinstance(item, CMenu.TreeDirectory): return if self.cut_copy_buffer is not None: success = self.editor.pasteItem(self.cut_copy_buffer, item, self.file_id) if success: self.cut_copy_buffer = None self.file_id = None def on_menu_tree_cursor_changed(self, treeview): selection = treeview.get_selection() if selection is None: return menus, iter = selection.get_selected() if iter is None: return menu = menus[iter][3] menu_path = menus.get_path(iter) item_tree = self.tree.get_object('item_tree') item_tree.get_selection().unselect_all() self.loadItems(self.menu_store[menu_path][3]) self.tree.get_object('edit_delete').set_sensitive(False) self.tree.get_object('edit_properties').set_sensitive(True) self.tree.get_object('edit_cut').set_sensitive(False) self.tree.get_object('edit_copy').set_sensitive(False) self.tree.get_object('properties_button').set_sensitive(True) self.tree.get_object('delete_button').set_sensitive(False) self.tree.get_object('cut_button').set_sensitive(False) self.tree.get_object('copy_button').set_sensitive(False) can_paste = isinstance(menu, CMenu.TreeDirectory) and self.cut_copy_buffer is not None self.tree.get_object('edit_paste').set_sensitive(can_paste) self.tree.get_object('paste_button').set_sensitive(can_paste) index = menus.get_path(iter).get_indices()[menus.get_path(iter).get_depth() - 1] parent_iter = menus.iter_parent(iter) count = menus.iter_n_children(parent_iter) can_go_up = index > 0 and isinstance(menu, CMenu.TreeDirectory) can_go_down = index < count - 1 and isinstance(menu, CMenu.TreeDirectory) self.last_tree = "menu_tree" def on_item_tree_show_toggled(self, cell, path): item = self.item_store[path][3] if isinstance(item, CMenu.TreeSeparator): return if self.item_store[path][0]: self.editor.setVisible(item, False) else: self.editor.setVisible(item, True) self.item_store[path][0] = not self.item_store[path][0] def on_item_tree_cursor_changed(self, treeview): selection = treeview.get_selection() if selection is None: return items, iter = selection.get_selected() if iter is None: return item = items[iter][3] self.tree.get_object('edit_delete').set_sensitive(True) self.tree.get_object('delete_button').set_sensitive(True) can_edit = not isinstance(item, CMenu.TreeSeparator) self.tree.get_object('edit_properties').set_sensitive(can_edit) self.tree.get_object('properties_button').set_sensitive(can_edit) can_cut_copy = not isinstance(item, CMenu.TreeDirectory) self.tree.get_object('cut_button').set_sensitive(can_cut_copy) self.tree.get_object('copy_button').set_sensitive(can_cut_copy) self.tree.get_object('edit_cut').set_sensitive(can_cut_copy) self.tree.get_object('edit_copy').set_sensitive(can_cut_copy) can_paste = isinstance(item, CMenu.TreeDirectory) and self.cut_copy_buffer is not None self.tree.get_object('edit_paste').set_sensitive(can_paste) self.tree.get_object('paste_button').set_sensitive(can_paste) index = items.get_path(iter).get_indices()[0] can_go_up = index > 0 and isinstance(item, CMenu.TreeDirectory) can_go_down = index < len(items) - 1 and isinstance(item, CMenu.TreeDirectory) self.last_tree = "item_tree" def on_item_tree_row_activated(self, treeview, path, column): self.on_edit_properties_activate(None) def on_item_tree_popup_menu(self, item_tree, event=None): model, iter = item_tree.get_selection().get_selected() if event: #don't show if it's not the right mouse button if event.button != 3: return button = event.button event_time = event.time info = item_tree.get_path_at_pos(int(event.x), int(event.y)) if info is not None: path, col, cellx, celly = info item_tree.grab_focus() item_tree.set_cursor(path, col, 0) else: path = model.get_path(iter) button = 0 event_time = 0 item_tree.grab_focus() item_tree.set_cursor(path, item_tree.get_columns()[0], 0) popup = self.tree.get_object('edit_menu') popup.popup(None, None, None, None, button, event_time) #without this shift-f10 won't work return True def on_menu_tree_popup_menu(self, menu_tree, event=None): model, iter = menu_tree.get_selection().get_selected() if event: #don't show if it's not the right mouse button if event.button != 3: return button = event.button event_time = event.time info = menu_tree.get_path_at_pos(int(event.x), int(event.y)) if info is not None: path, col, cellx, celly = info menu_tree.grab_focus() menu_tree.set_cursor(path, col, 0) else: path = model.get_path(iter) button = 0 event_time = 0 menu_tree.grab_focus() menu_tree.set_cursor(path, menu_tree.get_columns()[0], 0) popup = self.tree.get_object('edit_menu') popup.popup(None, None, None, None, button, event_time) #without this shift-f10 won't work return True def on_item_tree_key_press_event(self, item_tree, event): if event.keyval == Gdk.KEY_Delete: self.on_edit_delete_activate(item_tree) def on_restore_button_clicked(self, button): self.editor.restoreToSystem() def on_close_button_clicked(self, button): self.quit() def on_properties_button_clicked(self, button): self.on_edit_properties_activate(None) def on_delete_button_clicked(self, button): self.on_edit_delete_activate(None) def on_cut_button_clicked(self, button): self.on_edit_cut_activate(None) def on_copy_button_clicked(self, button): self.on_edit_copy_activate(None) def on_paste_button_clicked(self, button): self.on_edit_paste_activate(None) def quit(self): Gtk.main_quit() Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/util.py0000664000175000017500000001431513215735076025174 0ustar fabiofabio# -*- coding: utf-8 -*- # Alacarte Menu Editor - Simple fd.o Compliant Menu Editor # Copyright (C) 2006 Travis Watkins # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA import os import xml.dom.minidom import uuid from collections import Sequence from gi.repository import Gtk, GdkPixbuf, CMenu, GLib, Gdk DESKTOP_GROUP = GLib.KEY_FILE_DESKTOP_GROUP KEY_FILE_FLAGS = GLib.KeyFileFlags.KEEP_COMMENTS | GLib.KeyFileFlags.KEEP_TRANSLATIONS def fillKeyFile(keyfile, items): for key, item in items.iteritems(): if item is None: continue if isinstance(item, bool): keyfile.set_boolean(DESKTOP_GROUP, key, item) elif isinstance(item, basestring): keyfile.set_string(DESKTOP_GROUP, key, item) elif isinstance(item, Sequence): keyfile.set_string_list(DESKTOP_GROUP, key, item) def getNameFromKeyFile(keyfile): return keyfile.get_string(DESKTOP_GROUP, "Name") def getUniqueFileId(name, extension): while 1: filename = name + '-' + str(uuid.uuid1()) + extension if extension == '.desktop': path = getUserItemPath() if not os.path.isfile(os.path.join(path, filename)) and not getItemPath(filename): break elif extension == '.directory': path = getUserDirectoryPath() if not os.path.isfile(os.path.join(path, filename)) and not getDirectoryPath(filename): break return filename def getUniqueRedoFile(filepath): while 1: new_filepath = filepath + '.redo-' + str(uuid.uuid1()) if not os.path.isfile(new_filepath): break return new_filepath def getUniqueUndoFile(filepath): filename, extension = os.path.split(filepath)[1].rsplit('.', 1) while 1: if extension == 'desktop': path = getUserItemPath() elif extension == 'directory': path = getUserDirectoryPath() elif extension == 'menu': path = getUserMenuPath() new_filepath = os.path.join(path, filename + '.' + extension + '.undo-' + str(uuid.uuid1())) if not os.path.isfile(new_filepath): break return new_filepath def getItemPath(file_id): for path in GLib.get_system_data_dirs(): file_path = os.path.join(path, 'applications', file_id) if os.path.isfile(file_path): return file_path return None def getUserItemPath(): item_dir = os.path.join(GLib.get_user_data_dir(), 'applications') if not os.path.isdir(item_dir): os.makedirs(item_dir) return item_dir def getDirectoryPath(file_id): for path in GLib.get_system_data_dirs(): file_path = os.path.join(path, 'desktop-directories', file_id) if os.path.isfile(file_path): return file_path return None def getUserDirectoryPath(): menu_dir = os.path.join(GLib.get_user_data_dir(), 'desktop-directories') if not os.path.isdir(menu_dir): os.makedirs(menu_dir) return menu_dir def getUserMenuPath(): menu_dir = os.path.join(GLib.get_user_config_dir(), 'menus') if not os.path.isdir(menu_dir): os.makedirs(menu_dir) return menu_dir def getSystemMenuPath(file_id): for path in GLib.get_system_config_dirs(): file_path = os.path.join(path, 'menus', file_id) if os.path.isfile(file_path): return file_path return None def getUserMenuXml(tree): system_file = getSystemMenuPath(os.path.basename(tree.get_canonical_menu_path())) name = tree.get_root_directory().get_menu_id() menu_xml = "\n" menu_xml += "\n " + name + "\n " menu_xml += "" + system_file + "\n\n" return menu_xml class SurfaceWrapper: def __init__(self, surface): self.surface = surface def getIcon(item, widget): wrapper = SurfaceWrapper(None) pixbuf = None if item is None: return wrapper if isinstance(item, CMenu.TreeDirectory): gicon = item.get_icon() elif isinstance(item, CMenu.TreeEntry): app_info = item.get_app_info() gicon = app_info.get_icon() else: return wrapper if gicon is None: return wrapper icon_theme = Gtk.IconTheme.get_default() size = 24 * widget.get_scale_factor() info = icon_theme.lookup_by_gicon(gicon, size, 0) if info is None: return wrapper try: pixbuf = info.load_icon() except GLib.GError: return wrapper if pixbuf is None: return wrapper if pixbuf.get_width() != size or pixbuf.get_height() != size: pixbuf = pixbuf.scale_simple(size, size, GdkPixbuf.InterpType.HYPER) wrapper.surface = Gdk.cairo_surface_create_from_pixbuf (pixbuf, widget.get_scale_factor(), widget.get_window()) return wrapper def removeWhitespaceNodes(node): remove_list = [] for child in node.childNodes: if child.nodeType == xml.dom.minidom.Node.TEXT_NODE: child.data = child.data.strip() if not child.data.strip(): remove_list.append(child) elif child.hasChildNodes(): removeWhitespaceNodes(child) for node in remove_list: node.parentNode.removeChild(node) def menuSortKey(node): prefCats = ["administration", "preferences"] key = node.get_menu_id().lower() name = node.get_name().lower() if key in prefCats: name = "zzzz" + name # Hack for prefCats to be sorted at the end return name Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/MenuEditor.py0000664000175000017500000006126413215735076026277 0ustar fabiofabio# -*- coding: utf-8 -*- # Alacarte Menu Editor - Simple fd.o Compliant Menu Editor # Copyright (C) 2006 Travis Watkins, Heinrich Wendel # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA import os import xml.dom.minidom import xml.parsers.expat from gi.repository import CMenu, GLib from cme import util class MenuEditor(object): def __init__(self, name='cinnamon-applications.menu'): self.name = name self.tree = CMenu.Tree.new(name, CMenu.TreeFlags.SHOW_EMPTY|CMenu.TreeFlags.INCLUDE_EXCLUDED|CMenu.TreeFlags.INCLUDE_NODISPLAY|CMenu.TreeFlags.SHOW_ALL_SEPARATORS|CMenu.TreeFlags.SORT_DISPLAY_NAME) self.tree.connect('changed', self.menuChanged) self.load() self.path = os.path.join(util.getUserMenuPath(), self.tree.props.menu_basename) self.loadDOM() def loadDOM(self): try: self.dom = xml.dom.minidom.parse(self.path) except (IOError, xml.parsers.expat.ExpatError), e: self.dom = xml.dom.minidom.parseString(util.getUserMenuXml(self.tree)) util.removeWhitespaceNodes(self.dom) def load(self): if not self.tree.load_sync(): raise ValueError("can not load menu tree %r" % (self.name,)) def menuChanged(self, *a): self.load() def save(self): fd = open(self.path, 'w') fd.write(self.dom.toprettyxml()) fd.close() def restoreToSystem(self): self.restoreTree(self.tree.get_root_directory()) path = os.path.join(util.getUserMenuPath(), os.path.basename(self.tree.get_canonical_menu_path())) try: os.unlink(path) except OSError: pass self.loadDOM() def restoreTree(self, menu): item_iter = menu.iter() item_type = item_iter.next() while item_type != CMenu.TreeItemType.INVALID: if item_type == CMenu.TreeItemType.DIRECTORY: item = item_iter.get_directory() self.restoreTree(item) elif item_type == CMenu.TreeItemType.ENTRY: item = item_iter.get_entry() self.restoreItem(item) item_type = item_iter.next() self.restoreMenu(menu) def restoreItem(self, item): if not self.canRevert(item): return try: os.remove(item.get_desktop_file_path()) except OSError: pass self.save() def restoreMenu(self, menu): if not self.canRevert(menu): return #wtf happened here? oh well, just bail if not menu.get_desktop_file_path(): return file_id = os.path.split(menu.get_desktop_file_path())[1] path = os.path.join(util.getUserDirectoryPath(), file_id) try: os.remove(path) except OSError: pass self.save() def getMenus(self, parent): if parent is None: yield (self.tree.get_root_directory(), True) return item_iter = parent.iter() item_type = item_iter.next() items = []; while item_type != CMenu.TreeItemType.INVALID: if item_type == CMenu.TreeItemType.DIRECTORY: item = item_iter.get_directory() items.append(item) item_type = item_iter.next() items.sort(key=util.menuSortKey) for item in items: yield (item, self.isVisible(item)) def getContents(self, item): contents = [] item_iter = item.iter() item_type = item_iter.next() while item_type != CMenu.TreeItemType.INVALID: item = None if item_type == CMenu.TreeItemType.DIRECTORY: item = item_iter.get_directory() elif item_type == CMenu.TreeItemType.ENTRY: item = item_iter.get_entry() elif item_type == CMenu.TreeItemType.HEADER: item = item_iter.get_header() elif item_type == CMenu.TreeItemType.ALIAS: item = item_iter.get_alias() elif item_type == CMenu.TreeItemType.SEPARATOR: item = item_iter.get_separator() if item: contents.append(item) item_type = item_iter.next() return contents def getItems(self, menu): item_iter = menu.iter() item_type = item_iter.next() while item_type != CMenu.TreeItemType.INVALID: item = None if item_type == CMenu.TreeItemType.ENTRY: item = item_iter.get_entry() elif item_type == CMenu.TreeItemType.DIRECTORY: item = item_iter.get_directory() elif item_type == CMenu.TreeItemType.HEADER: item = item_iter.get_header() elif item_type == CMenu.TreeItemType.ALIAS: item = item_iter.get_alias() elif item_type == CMenu.TreeItemType.SEPARATOR: item = item_iter.get_separator() yield (item, self.isVisible(item)) item_type = item_iter.next() def canRevert(self, item): if isinstance(item, CMenu.TreeEntry): if util.getItemPath(item.get_desktop_file_id()) is not None: path = util.getUserItemPath() if os.path.isfile(os.path.join(path, item.get_desktop_file_id())): return True elif isinstance(item, CMenu.TreeDirectory): if item.get_desktop_file_path(): file_id = os.path.split(item.get_desktop_file_path())[1] else: file_id = item.get_menu_id() + '.directory' if util.getDirectoryPath(file_id) is not None: path = util.getUserDirectoryPath() if os.path.isfile(os.path.join(path, file_id)): return True return False def setVisible(self, item, visible): dom = self.dom if isinstance(item, CMenu.TreeEntry): menu_xml = self.getXmlMenu(self.getPath(item.get_parent()), dom.documentElement, dom) if visible: self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Include') self.writeItem(item, NoDisplay=False) else: self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Exclude') self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom) elif isinstance(item, CMenu.TreeDirectory): item_iter = item.iter() first_child_type = item_iter.next() #don't mess with it if it's empty if first_child_type == CMenu.TreeItemType.INVALID: return menu_xml = self.getXmlMenu(self.getPath(item), dom.documentElement, dom) for node in self.getXmlNodesByName(['Deleted', 'NotDeleted'], menu_xml): node.parentNode.removeChild(node) self.writeMenu(item, NoDisplay=not visible) self.addXmlTextElement(menu_xml, 'DirectoryDir', util.getUserDirectoryPath(), dom) self.save() def createItem(self, parent, before, after, **kwargs): file_id = self.writeItem(None, **kwargs) self.insertExternalItem(file_id, parent.get_menu_id(), before, after) def insertExternalItem(self, file_id, parent_id, before=None, after=None): parent = self.findMenu(parent_id) dom = self.dom self.addItem(parent, file_id, dom) self.positionItem(parent, ('Item', file_id), before, after) self.save() def insertExternalMenu(self, file_id, parent_id, before=None, after=None): menu_id = file_id.rsplit('.', 1)[0] parent = self.findMenu(parent_id) dom = self.dom self.addXmlDefaultLayout(self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) , dom) menu_xml = self.getXmlMenu(self.getPath(parent) + [menu_id], dom.documentElement, dom) self.addXmlTextElement(menu_xml, 'Directory', file_id, dom) self.positionItem(parent, ('Menu', menu_id), before, after) self.save() def editItem(self, item, icon, name, comment, command, use_term, parent=None, final=True): #if nothing changed don't make a user copy app_info = item.get_app_info() if icon == app_info.get_icon() and name == app_info.get_display_name() and comment == item.get_comment() and command == item.get_exec() and use_term == item.get_launch_in_terminal(): return #hack, item.get_parent() seems to fail a lot if not parent: parent = item.get_parent() self.writeItem(item, Icon=icon, Name=name, Comment=comment, Exec=command, Terminal=use_term) if final: dom = self.dom menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom) self.save() def editMenu(self, menu, icon, name, comment, final=True): #if nothing changed don't make a user copy if icon == menu.get_icon() and name == menu.get_name() and comment == menu.get_comment(): return #we don't use this, we just need to make sure the exists #otherwise changes won't show up dom = self.dom menu_xml = self.getXmlMenu(self.getPath(menu), dom.documentElement, dom) self.writeMenu(menu, Icon=icon, Name=name, Comment=comment) if final: self.addXmlTextElement(menu_xml, 'DirectoryDir', util.getUserDirectoryPath(), dom) self.save() def copyItem(self, item): dom = self.dom file_path = item.get_desktop_file_path() copy_buffer = GLib.KeyFile() copy_buffer.load_from_file(file_path, util.KEY_FILE_FLAGS) return (copy_buffer, None) def cutItem(self, item): copy_buffer, file_id = self.copyItem(item) file_id = self.deleteItem(item) return (copy_buffer, file_id) def pasteItem(self, cut_copy_buffer, menu, file_id = None): try: path = self.getPath(menu) util.fillKeyFile(cut_copy_buffer, dict(Hidden=False, NoDisplay=False)) name = util.getNameFromKeyFile(cut_copy_buffer) if file_id is None: file_id = util.getUniqueFileId(name.replace(os.sep, '-'), '.desktop') out_path = os.path.join(util.getUserItemPath(), file_id) contents, length = cut_copy_buffer.to_data() f = open(out_path, 'w') f.write(contents) f.close() menu_xml = self.getXmlMenu(path, self.dom.documentElement, self.dom) self.addXmlFilename(menu_xml, self.dom, file_id, 'Include') self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), self.dom) self.save() return True except: return False def deleteItem(self, item): file_id = self.writeItem(item, Hidden=True) item_xml = self.getXmlMenu(self.getPath(item.get_parent()), self.dom.documentElement, self.dom) self.removeXmlFilename(item_xml, self.dom, file_id) self.save() return file_id def deleteMenu(self, menu): dom = self.dom menu_xml = self.getXmlMenu(self.getPath(menu), dom.documentElement, dom) self.addDeleted(menu_xml, dom) self.save() def deleteSeparator(self, item): parent = item.get_parent() contents = self.getContents(parent) contents.remove(item) layout = self.createLayout(contents) dom = self.dom menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) self.addXmlLayout(menu_xml, layout, dom) self.save() def findMenu(self, menu_id, parent=None): if parent is None: parent = self.tree.get_root_directory() if menu_id == parent.get_menu_id(): return parent item_iter = parent.iter() item_type = item_iter.next() while item_type != CMenu.TreeItemType.INVALID: if item_type == CMenu.TreeItemType.DIRECTORY: item = item_iter.get_directory() if item.get_menu_id() == menu_id: return item menu = self.findMenu(menu_id, item) if menu is not None: return menu item_type = item_iter.next() def isVisible(self, item): if isinstance(item, CMenu.TreeEntry): app_info = item.get_app_info() return not (item.get_is_excluded() or app_info.get_nodisplay()) elif isinstance(item, CMenu.TreeDirectory): return not item.get_is_nodisplay() return True def getPath(self, menu): names = [] current = menu while current is not None: try: names.append(current.get_menu_id()) except: names.append(current.get_desktop_file_id()) current = current.get_parent() # XXX - don't append root menu name, alacarte doesn't # expect it. look into this more. names.pop(-1) return names[::-1] def getXmlMenuPart(self, element, name): for node in self.getXmlNodesByName('Menu', element): for child in self.getXmlNodesByName('Name', node): if child.childNodes[0].nodeValue == name: return node return None def getXmlMenu(self, path, element, dom): for name in path: found = self.getXmlMenuPart(element, name) if found is not None: element = found else: element = self.addXmlMenuElement(element, name, dom) return element def addXmlMenuElement(self, element, name, dom): node = dom.createElement('Menu') self.addXmlTextElement(node, 'Name', name, dom) return element.appendChild(node) def addXmlTextElement(self, element, name, text, dom): for temp in element.childNodes: if temp.nodeName == name: if temp.childNodes[0].nodeValue == text: return node = dom.createElement(name) text = dom.createTextNode(text) node.appendChild(text) return element.appendChild(node) def addXmlFilename(self, element, dom, filename, type = 'Include'): # remove old filenames for node in self.getXmlNodesByName(['Include', 'Exclude'], element): if node.childNodes[0].nodeName == 'Filename' and node.childNodes[0].childNodes[0].nodeValue == filename: element.removeChild(node) # add new filename node = dom.createElement(type) node.appendChild(self.addXmlTextElement(node, 'Filename', filename, dom)) return element.appendChild(node) def removeXmlFilename(self, element, dom, filename): for node in self.getXmlNodesByName(['Include'], element): if node.childNodes[0].nodeName == 'Filename' and node.childNodes[0].childNodes[0].nodeValue == filename: element.removeChild(node) def addDeleted(self, element, dom): node = dom.createElement('Deleted') return element.appendChild(node) def makeKeyFile(self, file_path, kwargs): if 'KeyFile' in kwargs: return kwargs['KeyFile'] keyfile = GLib.KeyFile() if file_path is not None: keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS) util.fillKeyFile(keyfile, kwargs) return keyfile def writeItem(self, item, **kwargs): if item is not None: file_path = item.get_desktop_file_path() else: file_path = None keyfile = self.makeKeyFile(file_path, kwargs) if item is not None: file_id = item.get_desktop_file_id() else: file_id = util.getUniqueFileId(keyfile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, 'Name'), '.desktop') contents, length = keyfile.to_data() f = open(os.path.join(util.getUserItemPath(), file_id), 'w') f.write(contents) f.close() return file_id def writeMenu(self, menu, **kwargs): if menu is not None: file_id = os.path.split(menu.get_desktop_file_path())[1] file_path = menu.get_desktop_file_path() keyfile = GLib.KeyFile() keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS) elif menu is None and 'Name' not in kwargs: raise Exception('New menus need a name') else: file_id = util.getUniqueFileId(kwargs['Name'], '.directory') keyfile = GLib.KeyFile() util.fillKeyFile(keyfile, kwargs) contents, length = keyfile.to_data() f = open(os.path.join(util.getUserDirectoryPath(), file_id), 'w') f.write(contents) f.close() return file_id def getXmlNodesByName(self, name, element): for child in element.childNodes: if child.nodeType == xml.dom.Node.ELEMENT_NODE: if isinstance(name, str) and child.nodeName == name: yield child elif isinstance(name, list) or isinstance(name, tuple): if child.nodeName in name: yield child def addXmlMove(self, element, old, new, dom): if not self.undoMoves(element, old, new, dom): node = dom.createElement('Move') node.appendChild(self.addXmlTextElement(node, 'Old', old, dom)) node.appendChild(self.addXmlTextElement(node, 'New', new, dom)) #are parsed in reverse order, need to put at the beginning return element.insertBefore(node, element.firstChild) def addXmlLayout(self, element, layout, dom): # remove old layout for node in self.getXmlNodesByName('Layout', element): element.removeChild(node) # add new layout node = dom.createElement('Layout') for order in layout: if order[0] == 'Separator': child = dom.createElement('Separator') node.appendChild(child) elif order[0] == 'Filename': child = self.addXmlTextElement(node, 'Filename', order[1], dom) elif order[0] == 'Menuname': child = self.addXmlTextElement(node, 'Menuname', order[1], dom) elif order[0] == 'Merge': child = dom.createElement('Merge') child.setAttribute('type', order[1]) node.appendChild(child) return element.appendChild(node) def addXmlDefaultLayout(self, element, dom): # remove old default layout for node in self.getXmlNodesByName('DefaultLayout', element): element.removeChild(node) # add new layout node = dom.createElement('DefaultLayout') node.setAttribute('inline', 'false') return element.appendChild(node) def createLayout(self, items): layout = [] layout.append(('Merge', 'menus')) for item in items: if isinstance(item, CMenu.TreeDirectory): layout.append(('Menuname', item.get_menu_id())) elif isinstance(item, CMenu.TreeEntry): layout.append(('Filename', item.get_desktop_file_id())) elif isinstance(item, CMenu.TreeSeparator): layout.append(('Separator',)) else: layout.append(item) layout.append(('Merge', 'files')) return layout def addItem(self, parent, file_id, dom): xml_parent = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) self.addXmlFilename(xml_parent, dom, file_id, 'Include') def moveItem(self, parent, item, before=None, after=None): self.positionItem(parent, item, before=before, after=after) self.save() def getIndex(self, item, contents): index = -1 if isinstance(item, CMenu.TreeDirectory): for i in range(len(contents)): if type(item) is not type(contents[i]): continue if item.get_menu_id() == contents[i].get_menu_id(): index = i return index elif isinstance(item, CMenu.TreeEntry): for i in range(len(contents)): if type(item) is not type(contents[i]): continue if item.get_desktop_file_id() == contents[i].get_desktop_file_id(): index = i return index return index def positionItem(self, parent, item, before=None, after=None): contents = self.getContents(parent) index = -1 if after: index = self.getIndex(after, contents) + 1 # index = contents.index(after) + 1 elif before: index = self.getIndex(before, contents) # index = contents.index(before) else: # append the item to the list index = len(contents) #if this is a move to a new parent you can't remove the item item_index = self.getIndex(item, contents) if item_index > -1: # decrease the destination index, if we shorten the list if (before and (item_index < index)) \ or (after and (item_index < index - 1)): index -= 1 contents.remove(contents[item_index]) contents.insert(index, item) layout = self.createLayout(contents) dom = self.dom menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) self.addXmlLayout(menu_xml, layout, dom) def undoMoves(self, element, old, new, dom): nodes = [] matches = [] original_old = old final_old = old #get all elements for node in self.getXmlNodesByName(['Move'], element): nodes.insert(0, node) #if the matches our old parent we've found a stage to undo for node in nodes: xml_old = node.getElementsByTagName('Old')[0] xml_new = node.getElementsByTagName('New')[0] if xml_new.childNodes[0].nodeValue == old: matches.append(node) #we should end up with this path when completed final_old = xml_old.childNodes[0].nodeValue #undoing s for node in matches: element.removeChild(node) if len(matches) > 0: for node in nodes: xml_old = node.getElementsByTagName('Old')[0] xml_new = node.getElementsByTagName('New')[0] path = os.path.split(xml_new.childNodes[0].nodeValue) if path[0] == original_old: element.removeChild(node) for node in dom.getElementsByTagName('Menu'): name_node = node.getElementsByTagName('Name')[0] name = name_node.childNodes[0].nodeValue if name == os.path.split(new)[1]: #copy app and dir directory info from old root_path = dom.getElementsByTagName('Menu')[0].getElementsByTagName('Name')[0].childNodes[0].nodeValue xml_menu = self.getXmlMenu(root_path + '/' + new, dom.documentElement, dom) for app_dir in node.getElementsByTagName('AppDir'): xml_menu.appendChild(app_dir) for dir_dir in node.getElementsByTagName('DirectoryDir'): xml_menu.appendChild(dir_dir) parent = node.parentNode parent.removeChild(node) node = dom.createElement('Move') node.appendChild(self.addXmlTextElement(node, 'Old', xml_old.childNodes[0].nodeValue, dom)) node.appendChild(self.addXmlTextElement(node, 'New', os.path.join(new, path[1]), dom)) element.appendChild(node) if final_old == new: return True node = dom.createElement('Move') node.appendChild(self.addXmlTextElement(node, 'Old', final_old, dom)) node.appendChild(self.addXmlTextElement(node, 'New', new, dom)) return element.appendChild(node) Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/__init__.py0000664000175000017500000000000013215735076025740 0ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-menu-editor/cme/config.py0000664000175000017500000000033413215735076025460 0ustar fabiofabioprefix="/usr" datadir="/usr/share" localedir=datadir+"/locale" libdir="/usr/share/cinnamon" libexecdir="/usr/share/cinnamon/cinnamon-menu-editor" PACKAGE="cinnamon-menu-editor" VERSION="1.6.1" GETTEXT_PACKAGE="cinnamon" Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/0000775000175000017500000000000013215735076023416 5ustar fabiofabioCinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/page_memory.py0000664000175000017500000000423013215735076026273 0ustar fabiofabioimport pageutils from gi.repository import Gtk class MemoryView(pageutils.BaseListView): def __init__(self): store = Gtk.ListStore(str, int) pageutils.BaseListView.__init__(self, store) self.createTextColumn(0, "Name") self.createTextColumn(1, "Size (bytes)") column = self.createTextColumn(1, "Size (readable)") column.set_cell_data_func(self.rendererText, self.cellDataFuncSize) self.getUpdates() lookingGlassProxy.addStatusChangeCallback(self.onStatusChange) def cellDataFuncSize(self, column, cell, model, iter, data=None): value = model.get_value(iter, 1) if(value < 1000): cell.set_property("text", "%d B" % value) elif(value < 1000000): cell.set_property("text", "%.2f KB" % (value/1024.0)) elif(value < 1000000000): cell.set_property("text", "%.2f MB" % (value/1024.0/1024.0)) def onStatusChange(self, online): if online: self.getUpdates() def getUpdates(self, igno=None): self.store.clear() success, time_last_gc, data = lookingGlassProxy.GetMemoryInfo() if success: self.secondsLabel.set_text("%d" % time_last_gc) for key in data.keys(): self.store.append([key, data[key]]) def onFullGc(self, widget): lookingGlassProxy.FullGc() self.getUpdates() class ModulePage(pageutils.WindowAndActionBars): def __init__(self, parent): self.view = MemoryView() pageutils.WindowAndActionBars.__init__(self, self.view) self.parent = parent refresh = pageutils.ImageButton("view-refresh") refresh.set_tooltip_text("Refresh") refresh.connect("clicked", self.view.getUpdates) self.addToLeftBar(refresh, 1) fullGc = pageutils.ImageButton("user-trash-full") fullGc.set_tooltip_text("Full Garbage Collection") fullGc.connect ('clicked', self.view.onFullGc) self.addToLeftBar(fullGc, 1) self.addToBottomBar(Gtk.Label("Time since last GC:"), 2) self.view.secondsLabel = Gtk.Label("") self.addToBottomBar(self.view.secondsLabel, 2) Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/page_windows.py0000664000175000017500000000703213215735076026460 0ustar fabiofabioimport pageutils from gi.repository import Gtk class ModulePage(pageutils.BaseListView): def __init__(self, parent): store = Gtk.ListStore(int, str, str, str) pageutils.BaseListView.__init__(self, store) self.parent = parent column = self.createTextColumn(0, "ID") column.set_cell_data_func(self.rendererText, self.cellDataFuncID) self.createTextColumn(1, "Title") self.createTextColumn(2, "WMClass") self.createTextColumn(3, "Application") self.getUpdates() lookingGlassProxy.connect("WindowListUpdate", self.getUpdates) lookingGlassProxy.addStatusChangeCallback(self.onStatusChange) self.treeView.connect("row-activated", self.onRowActivated) self.treeView.connect("button-press-event", self.onButtonPress) # Popup menu self.popup = Gtk.Menu() inspectWindow = Gtk.MenuItem('Inspect Window') label = inspectWindow.get_children()[0] label.set_markup("" + inspectWindow.get_label() + "") inspectWindow.connect("activate", self.onInspectWindow) self.popup.append(inspectWindow) self.inspectApp = Gtk.MenuItem('Inspect Application') self.inspectApp.connect("activate", self.onInspectApplication) self.popup.append(self.inspectApp) self.popup.show_all() def cellDataFuncID(self, column, cell, model, treeIter, data=None): value = model.get_value(treeIter, 0) cell.set_property("text", "w(%d) / a(%d)" % (value, value)) def onRowActivated(self, treeview, path, view_column): treeIter = self.store.get_iter(path) objId = self.store.get_value(treeIter, 0) title = self.store.get_value(treeIter, 1) melangeApp.pages["inspect"].inspectElement("w(%d)" % objId, "object", title, "") def onInspectWindow(self, menuItem): treeIter = self.store.get_iter(self.selectedPath) objId = self.store.get_value(treeIter, 0) title = self.store.get_value(treeIter, 1) melangeApp.pages["inspect"].inspectElement("w(%d)" % objId, "object", title, "") def onInspectApplication(self, menuItem): treeIter = self.store.get_iter(self.selectedPath) objId = self.store.get_value(treeIter, 0) application = self.store.get_value(treeIter, 3) melangeApp.pages["inspect"].inspectElement("a(%d)" % objId, "object", application, "") def onButtonPress(self, treeview, event): if event.button == 3: x = int(event.x) y = int(event.y) pthinfo = treeview.get_path_at_pos(x, y) if pthinfo is not None: path, col, cellx, celly = pthinfo self.selectedPath = path treeview.grab_focus() treeview.set_cursor( path, col, 0) treeIter = self.store.get_iter(self.selectedPath) app = self.store.get_value(treeIter, 3) self.inspectApp.set_sensitive(app != "") self.popup.popup( None, None, None, None, event.button, event.time) return True def onStatusChange(self, online): if online: self.getUpdates() def getUpdates(self): self.store.clear() success, data = lookingGlassProxy.GetLatestWindowList() if success: try: for item in data: self.store.append([int(item["id"]), item["title"], item["wmclass"], item["app"]]) except Exception as e: print e Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/lookingglass_proxy.py0000664000175000017500000000757313215735076027741 0ustar fabiofabioimport dbus from gi.repository import Gio LG_DBUS_NAME = "org.Cinnamon.LookingGlass" LG_DBUS_PATH = "/org/Cinnamon/LookingGlass" class LookingGlassProxy: def __init__(self): self._signals = [] self._statusChangeCallbacks = [] self._proxy = None Gio.bus_watch_name(Gio.BusType.SESSION, LG_DBUS_NAME, Gio.BusNameWatcherFlags.NONE, self._onConnect, self._onDisconnect) def addStatusChangeCallback(self, callback): self._statusChangeCallbacks.append(callback) def refreshStatus(self): if self._proxy != None: self._setStatus(True) else: self._setStatus(False) def getIsReady(self): return self._proxy != None def connect(self, name, callback): self._signals.append((name, callback)) def _onSignal(self, proxy, sender_name, signal_name, params): for name, callback in self._signals: if signal_name == name: callback(*params) def _setStatus(self, state): for callback in self._statusChangeCallbacks: callback(state) def _onConnect(self, connection, name, owner): if self._proxy: return self._initProxy() def _onDisconnect(self, connection, name): self._proxy = None self._setStatus(False) def _initProxy(self): try: self._proxy = Gio.DBusProxy.new_for_bus(Gio.BusType.SESSION, Gio.DBusProxyFlags.NONE, None, LG_DBUS_NAME, LG_DBUS_PATH, LG_DBUS_NAME, None, self._onProxyReady, None) except dbus.exceptions.DBusException as e: print(e) self._proxy = None def _onProxyReady(self, object, result, data=None): self._proxy = Gio.DBusProxy.new_for_bus_finish(result) self._proxy.connect("g-signal", self._onSignal) self._setStatus(True) # Proxy Methods: def Eval(self, code): if self._proxy: try: self._proxy.Eval('(s)', code) except: pass def GetResults(self): if self._proxy: try: return self._proxy.GetResults('()') except: pass return (False, "") def AddResult(self, code): if self._proxy: try: self._proxy.AddResult('(s)', code) except: pass def GetErrorStack(self): if self._proxy: try: return self._proxy.GetErrorStack('()') except: pass return (False, "") def GetMemoryInfo(self): if self._proxy: try: return self._proxy.GetMemoryInfo('()') except: pass return (False, 0, {}) def FullGc(self): if self._proxy: try: self._proxy.FullGc('()') except: pass def Inspect(self, code): if self._proxy: try: return self._proxy.Inspect('(s)', code) except: pass return (False, "") def GetLatestWindowList(self): if self._proxy: try: return self._proxy.GetLatestWindowList('()') except: pass return (False, "") def StartInspector(self): if self._proxy: try: self._proxy.StartInspector('()') except: pass def GetExtensionList(self): if self._proxy: try: return self._proxy.GetExtensionList('()') except: pass return (False, "") def ReloadExtension(self, uuid, xletType): if self._proxy: try: return self._proxy.ReloadExtension('(ss)', uuid, xletType) except: pass return (False, "") Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/page_log.py0000664000175000017500000001177513215735076025560 0ustar fabiofabioimport datetime import pageutils from gi.repository import Gtk class LogEntry(): def __init__(self, category, time, message): self.category = category self.time = int(time) self.timestr = datetime.datetime.fromtimestamp(self.time).strftime("%Y-%m-%dT%H:%M:%SZ") self.message = message self.formattedText = "%s t=%s %s\n" % (category, self.timestr, message) class LogView(Gtk.ScrolledWindow): def __init__(self): Gtk.ScrolledWindow.__init__(self) self.set_shadow_type(Gtk.ShadowType.ETCHED_IN) self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.textview = Gtk.TextView() self.textview.set_editable(False) self.add(self.textview) self.textbuffer = self.textview.get_buffer() self.scroll_mark = self.textbuffer.create_mark(None, self.textbuffer.get_end_iter(), False) self.log = [] self.addedMessages = 0 self.firstMessageTime = None self.enabledTypes = {'info': True, 'warning': True, 'error': True, 'trace': False } self.typeTags = { 'info': self.textbuffer.create_tag("info", foreground="#1a6f18", invisible=self.enabledTypes["info"] != True, invisible_set=True), 'warning': self.textbuffer.create_tag("warning", foreground="#c8bf33", invisible=self.enabledTypes["warning"] != True, invisible_set=True), 'error': self.textbuffer.create_tag("error", foreground="#9f1313", invisible=self.enabledTypes["error"] != True, invisible_set=True), 'trace': self.textbuffer.create_tag("trace", foreground="#18186f", invisible=self.enabledTypes["trace"] != True, invisible_set=True) } #todo: load all enabled types from gsettings #self.enabledTypes = {'info': False, 'warning': False, 'error': False, 'trace': False } #for key in data: # self.enabledTypes[key] = True self.getUpdates() lookingGlassProxy.connect("LogUpdate", self.getUpdates) lookingGlassProxy.addStatusChangeCallback(self.onStatusChange) def append(self, category, time, message): entry = LogEntry(category, time, message) self.log.append(entry) return entry def onButtonToggled(self, button, data): active = button.get_active() self.enabledTypes[data] = active self.typeTags[data].props.invisible = active != True self.textbuffer.set_modified(True) def onStatusChange(self, online): textIter = self.textbuffer.get_end_iter() if online: entry = self.append("info", 0, "================ DBus connection established ===============") else: entry = self.append("warning", 0, "================ DBus connection lost ===============") self.textbuffer.insert_with_tags(textIter, entry.formattedText, self.typeTags[entry.category]) self.getUpdates(True) def getUpdates(self, reread = False): success, data = lookingGlassProxy.GetErrorStack() if success: try: dataSize = len(data) if dataSize > 0: # If this is a completely new log, start reading at the beginning firstMessageTime = data[0]["timestamp"] if self.addedMessages > dataSize or self.firstMessageTime != firstMessageTime or reread: self.firstMessageTime = firstMessageTime self.addedMessages = 0 if reread: start, end = self.textbuffer.get_bounds() self.textbuffer.delete(start, end) textIter = self.textbuffer.get_end_iter() for item in data[self.addedMessages:]: entry = self.append(item["category"], float(item["timestamp"])*0.001, item["message"]) self.textbuffer.insert_with_tags(textIter, entry.formattedText, self.typeTags[entry.category]) self.addedMessages += 1 self.textview.scroll_to_mark(self.scroll_mark, 0, True, 1, 1) except Exception as e: print e class ModulePage(pageutils.WindowAndActionBars): def __init__(self, parent): self.view = LogView() pageutils.WindowAndActionBars.__init__(self, self.view) self.parent = parent self.addToggleButton("info", "dialog-information", "Show/Hide Messages tagged as 'info'") self.addToggleButton("warning", "dialog-warning", "Show/Hide Messages tagged as 'warning'") self.addToggleButton("error", "dialog-error", "Show/Hide Messages tagged as 'error'") self.addToggleButton("trace", "dialog-question", "Show/Hide Messages tagged as 'trace'") def addToggleButton(self, logType, icon, tooltip): button = pageutils.ImageToggleButton(icon) button.connect("toggled", self.view.onButtonToggled, logType) button.set_active(self.view.enabledTypes[logType]) button.set_tooltip_text(tooltip) self.addToLeftBar(button, 1) Cinnamon-3.6.7/files/usr/share/cinnamon/cinnamon-looking-glass/cinnamon-looking-glass.py0000775000175000017500000005000213215735076030341 0ustar fabiofabio#!/usr/bin/python2 # Todo: # - TextTag.invisible does not work nicely with scrollheight, find out why # - (Sometimes scrollbars think there is more or less to scroll than there actually is after showing/hiding entries in page_log.py) # - Add insert button to "simple types" inspect dialog ? is there actual use for these types inserted as results ? # - Load all enabled log categories and window height from gsettings # - Make CommandLine entry & history work more like a normal terminal # - When navigating through history and modifying a line # - When pressing ctrl + r, search history # - auto-completion ? import sys import os import pyinotify import gi gi.require_version('Gtk', '3.0') from gi.repository import Gio, Gtk, GObject, Gdk import dbus, dbus.service, dbus.glib import pageutils from lookingglass_proxy import LookingGlassProxy from dbus.mainloop.glib import DBusGMainLoop import signal signal.signal(signal.SIGINT, signal.SIG_DFL) MELANGE_DBUS_NAME = "org.Cinnamon.Melange" MELANGE_DBUS_PATH = "/org/Cinnamon/Melange" class MenuButton(Gtk.Button): def __init__(self, text): Gtk.Button.__init__(self, text) self.connect("clicked", self.onClicked) def set_popup(self, menu): self.menu = menu def onClicked(self, widget): x, y, w, h = self.getScreenCoordinates() self.menu.popup(None, None, lambda menu, data: (x, y+h, True), None, 1, 0) def getScreenCoordinates(self): parent = self.get_parent_window() x, y = parent.get_root_origin() w = parent.get_width() h = parent.get_height() extents = parent.get_frame_extents() allocation = self.get_allocation() return (x + (extents.width-w)/2 + allocation.x, y + (extents.height-h)-(extents.width-w)/2 + allocation.y, allocation.width, allocation.height) class CommandLine(Gtk.Entry): def __init__(self): Gtk.Entry.__init__(self) self.settings = Gio.Settings.new("org.cinnamon") self.history = self.settings.get_strv("looking-glass-history") self.historyPosition = -1 self.lastText = "" self.connect('key-press-event', self.onKeyPress) self.connect("populate-popup", self.populatePopup) def populatePopup(self, view, menu): menu.append(Gtk.SeparatorMenuItem()) clear = Gtk.MenuItem("Clear History") clear.connect('activate', self.historyClear) menu.append(clear) menu.show_all() return False def onKeyPress(self, widget, event): if event.keyval == Gdk.KEY_Up: self.historyPrev() return True if event.keyval == Gdk.KEY_Down: self.historyNext() return True if event.keyval == Gdk.KEY_Return or event.keyval == Gdk.KEY_KP_Enter: self.execute() return True def historyClear(self, menuItem): self.history = [] self.historyPosition = -1 self.lastText = "" self.settings.set_strv("looking-glass-history", self.history) def historyPrev(self): num = len(self.history) if self.historyPosition == 0 or num == 0: return if self.historyPosition == -1: self.historyPosition = num - 1 self.lastText = self.get_text() else: self.historyPosition -= 1 self.set_text(self.history[self.historyPosition]) self.select_region(-1, -1) def historyNext(self): if self.historyPosition == -1: return num = len(self.history) if self.historyPosition == num-1: self.historyPosition = -1 self.set_text(self.lastText) else: self.historyPosition += 1 self.set_text(self.history[self.historyPosition]) self.select_region(-1, -1) def execute(self): self.historyPosition = -1 command = self.get_text() if command != "": num = len(self.history) if num == 0 or self.history[num-1] != command: self.history.append(command) self.set_text("") self.settings.set_strv("looking-glass-history", self.history) lookingGlassProxy.Eval(command) def doCrash(self): lookingGlassProxy.Eval("global.segfault()") class NewLogDialog(Gtk.Dialog): def __init__(self, parent): Gtk.Dialog.__init__(self, "Add a new file watcher", parent, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK)) self.set_default_size(150, 100) label = Gtk.Label("") label.set_markup("Add File Watch:\n\nPlease select a file to watch and a name for the tab\n") box = self.get_content_area() box.add(label) self.store = Gtk.ListStore(str, str) self.store.append(["glass.log", "~/.cinnamon/glass.log"]) self.store.append(["custom", "